上図のセルA2には「=A1」という参照式が入力されています。セルA2には参照しているセルA1のデータが表示されます。このセルA2をセルB2にコピーするとどうなるでしょう。参照式の「=A1」はアドレスが自動調整されて「=B1」と変化します。
では、セルA2をセルB2に移動した場合はどうでしょう。セルを移動するには、セルをドラッグするか、[編集]メニューの[切り取り]と[貼り付け]を実行します。
Excelの数式は、コピーしたときにはアドレスが自動調整されますが、移動のときは調整されません。移動先のセルB2では、相変わらずセルA1を参照しています。
この例のように、セルを移動しても常に1つ上のセルを参照するには「=INDIRECT("R[-1]C",FALSE)」という式を使います。INDIRECT関数は文字列で指定したアドレスを、実際に参照可能な形式に変換する関数です。INDIRECT関数についてはこの関数はこう使え!「INDIRECT関数」をご覧ください。
INDIRECT関数に指定した文字列「R[-1]C」はR1C1形式によるセルの指定方法です。Rに続く数字が、アクティブセルから見た行位置を表します。ここでは-1ですから1行上という意味になります。2つ目の引数Falseは、アドレスをR1C1形式で指定するという指示です。
もうひとつ、よくあるケースを解説しましょう。たとえば「=A1」という参照式でセルA1を参照しているとき、1行目やA列全体を削除すると、「=A1」は「#REF!」というエラーになってしまいます。
行や列を削除したとき、いつも同じセルを参照したい場合もINDIRECT関数が役立ちます。「=A1」の代わりに「=INDIRECT("A1")」とすればいいのです。