循環参照の見つけ方とバグ


複数のセルがお互いを参照しあう状態を循環参照と呼びます。Excel 2003では、誤って循環参照を作ってしまった場合[循環参照]ツールバーが表示されました。[循環参照]ツールバーでは、現在循環参照しているセルがリストから選択できますので、離れたセルが循環参照していても容易に発見できました。

ツールバーがなくなったExcel 2007では、次のようにして循環参照しているセルを見つけます。リボンの[数式]タブを開き、[ワークシート分析]グループの[エラーチェック]ボタン右にある▼をクリックします。[エラーチェック]ボタンをクリックしてしまうとワークシートのエラーチェックが行われるだけですので注意してください。▼をクリックして[循環参照]をポイントすると、循環参照しているセルが表示されます。

もちろん、別のシートや別のブックを参照している場合には、そのように表示されます。

このときステータスバーには、循環参照が起きているというメッセージと、そのセルのアドレスが表示されます。

動作の検証をしていて、このステータスバー表示にバグがあるのを発見しました。

循環参照しているブックを開いている状態で、新しいブックを挿入します。挿入したブックがアクティブになり、ステータスバーには「循環参照」とだけ表示され、セルのアドレスは表示されません。循環参照している問題のブックが非アクティブになったからです。

さて、この新しく挿入したブックに自動再計算関数を入力してみましょう。たとえばセルA1に「=INDIRECT("B1")」と入力します。

すると、自動再計算関数を入力したセルが循環参照しているとして、ステータスバーにアドレス(ここではINDIRECT関数を入力したA1)が表示されます。

どう考えてもセルA1は無関係です。おそらく、Excelの内部で複数回再計算が行われたセルをチェックしているのでしょうけど、循環参照しているセルだけでなく、自動的に再計算が行われる関数も誤って見つけてしまうのだと思います。なお、自動再計算関数ではない関数を入力した場合は、ステータスバーに表示されません。