Excelで「一つ下のセルの値」を横に並べたくて =A3 と打ち、下方向にコピーしたら——参照が全部ずれてぐちゃぐちゃになった。そんな経験はないでしょうか。「常に一つ下を見る」という関係を数式そのものに持たせるには、単純な直接参照だけでは足りません。
この記事を読むと、OFFSET と INDIRECT を使って「行を挿入・削除しても、下にコピーしてもずれない」動的な参照を作れるようになります。先に結論だけ言うと、移動量を数値で柔軟に指定したいなら OFFSET、セル番地やシート名を文字列で組み立てたいなら INDIRECT です。この違いを、一つの表を最後まで使い回しながら確かめていきましょう。
▲ Excel サンプル
まず「=A3」で足りるか自問する
今回は「日別の売上を入力した表で、各行の隣に翌日の売上を並べたい」というシナリオで進めます。
| 行 | A列(日付) | B列(売上) | C列(翌日の売上を表示したい) |
|---|---|---|---|
| 2 | 6/1 | 10,000 | ←ここに 6/2 の売上を出したい |
| 3 | 6/2 | 12,000 | ←ここに 6/3 の売上 |
| 4 | 6/3 | 9,000 | … |
C2 に翌日の売上(B3)を出すだけなら、次で十分です。
=B3
固定の一箇所だけならこれがベストです。まずは「単純参照で足りないか?」を自問する——これが乱用を防ぐ第一歩です。ただしこの式を C3 C4 へコピーすると参照は素直にずれてくれる一方、行を途中に挿入するとロジックが崩れます。「常に一行下」という意味を数式に持たせたいときに、次の二つが効いてきます。
OFFSET関数で一つ下のセルを参照する
OFFSET は「基準セルから、指定した行数・列数だけ移動した先のセル」を返します。
=OFFSET(基準, 行の移動量, 列の移動量)
一つ下なら行の移動量を 1、列の移動量を 0。C2 に入れるなら次の通りです。
=OFFSET(B2, 1, 0)
「B2 を基準に1行下・0列横」つまり B3(12,000)が返ります。
OFFSETが便利な理由
強みは、移動量を数式で指定できる点です。E1 に「何行下を見るか」を入れておけば——
=OFFSET(B2, E1, 0)
E1 を 1 にすれば翌日、2 にすれば翌々日、と値を変えるだけで参照先が動きます。ドロップダウンと組み合わせれば簡易検索ツールにもなります。
注意点と代替
OFFSET は「揮発性関数」で、シートを操作するたびに再計算されます。数万行で多用するとファイルが重くなるので使いどころは絞りましょう。動作を軽くしたいなら、非揮発性の INDEX で代用できます。
=INDEX(B:B, ROW()+1)
同じ「一つ下」を、再計算の負荷を抑えて実現できます。
INDIRECT関数で一つ下のセルを参照する
INDIRECT は「文字列で表したセル番地」を実際の参照に変換します。
=INDIRECT("B3")
これで B3 が返りますが、固定では意味がありません。行番号を計算して文字列を組み立てます。C2 に入れるなら——
=INDIRECT("B" & (ROW()+1))
ROW() は数式が入っているセルの行番号を返します。C2 なら 2 なので ROW()+1 は 3。"B" とつないで "B3" を作り、その値を参照します。下にコピーしても、それぞれの行を基準に常に「一つ下」を見てくれるのがポイントです。
シート切り替えとよくあるエラー
INDIRECT はシート名を変数として扱えます。F1 にシート名を入れておけば——
=INDIRECT("'" & F1 & "'!B3")
F1 を変えるだけで参照シートを切り替えられ、複数シートの同じ位置を集計するときに重宝します。
ここで詰まりやすいのが #REF! エラーです。多くはシート名やセル番地の文字列が実在しないことが原因です。特にシート名に空白や記号(6月 集計 など)が含まれる場合は、上の式のように名前を '(シングルクォート)で囲むと解決します。エラーが出たら、まず組み立てた文字列が正しい番地になっているかを確認しましょう。
OFFSETとINDIRECT、どちらを使う?
判断の順番はシンプルです。
- 固定の一箇所で足りるか? →
=B3で十分 - 移動量を数値で柔軟に動かしたい →
OFFSET(軽さ重視ならINDEX) - セル番地やシート名を文字列で組み立てたい →
INDIRECT
まとめ
- 単純な参照なら
=B3で十分。まず「これで足りるか」を自問する - 移動量を動的に変えたいなら
=OFFSET(B2, 1, 0)、負荷を抑えたいなら=INDEX(B:B, ROW()+1) - 行番号を計算して参照したいなら
=INDIRECT("B" & (ROW()+1)) - シート切り替えで
#REF!が出たら、シート名を'で囲む
「一つ下を参照する」という一見単純な操作も、使い分けを押さえれば、ずれない・動く表へ進化します。まずは小さな表に数式を打ち込み、参照先が変わる様子を確かめてみてください。手を動かすことが、関数を身につける一番の近道です。
関連記事
- Excelで1行おき(奇数行・偶数行)を一発抽出する方法|FILTER関数で解決
- 【コピペOK】Excelで最終更新日・作成日を自動表示する2つの方法
- Excelで日付が「45658」など数字になる原因と直し方【3パターン】
- Excelで数字が「E+11」に勝手に変わる!元に戻す&防ぐ全方法【電話番号・コード対応】
- Excelで「####」が表示される原因と直し方|列幅を広げても消えない時も解決
あわせてチェック
- 【1280円】厚手PUレザーデスクマットの選び方|学習机から在宅デスクまで
- Excel パワークエリ 書籍 おすすめ3選+失敗しない選び方【2026年6月】
- 【2026年6月版】Excel VBAの本 おすすめ7選|レベル別・目的別に失敗しない選び方
この記事を読んだ方におすすめ
Excelデータ分析入門書 関数・グラフ・ピボットテーブル・分析ツール解説 本 … ¥4,120
楽天市場で詳細を見る → Excelデータ分析入門書 関数・グラフ・ピボットテーブル・分析ツール解説 本 …