概要
「データの行数が毎回変わる」「開始位置がズレる」「動く範囲を参照したい」
そんなときに使えるのが OFFSET(オフセット)関数です。
OFFSET は、
“基準セルから、上下左右に何マスずらした位置を起点に、指定サイズの範囲を返す”
という関数です。
動く範囲(可変範囲)を扱えるため、
- グラフの自動更新
- 最新データだけを参照
- 行数が変わる表の合計
など、実務でとても役立ちます。
OFFSET の基本
書式
=OFFSET(基準セル, 行方向のずれ, 列方向のずれ, [高さ], [幅])
意味をかみ砕くと:
- 基準セル:スタート地点
- 行方向のずれ:下に何行動くか(上はマイナス)
- 列方向のずれ:右に何列動くか(左はマイナス)
- 高さ:返す範囲の行数
- 幅:返す範囲の列数
OFFSET は「セル」ではなく「範囲」を返すのがポイントです。
基本例(1セルをずらして参照)
基準セル A1 から「1行下・2列右」のセルを参照
=OFFSET(A1, 1, 2)
A1 → 1行下 → A2
A2 → 2列右 → C2
結果:C2 を参照
高さ・幅を省略すると「1セルだけ」を返します。
可変範囲を作る(OFFSET の本領)
行数が変わる表の合計を自動化
A列にデータがあり、行数が毎回変わるとします。
B1 に「データ件数」が入っている場合:
=SUM(OFFSET(A1, 1, 0, B1, 1))
意味:
- A1 を基準に
- 1行下(A2)を起点に
- 高さ=B1 行
- 幅=1列
→ A2 から A(1+B1) までの範囲を SUM する
データが増えても減っても、B1 の件数に合わせて自動で範囲が変わります。
最新データだけを参照する
「最後の5件」だけを合計したい
A列にデータがあり、件数は COUNTA(A:A) で求められるとします。
=SUM(OFFSET(A1, COUNTA(A:A)-5+1, 0, 5, 1))
意味:
- A1 から「データ件数−4」行下へ移動
- そこから高さ5行の範囲を SUM
→ 最後の5件だけを合計
横方向の可変範囲
「右に増えていくデータ」を自動参照
A1 を基準に、右方向に増えるデータの「最初の3列」を参照:
=OFFSET(A1, 0, 0, 1, 3)
高さ1行、幅3列 → A1:C1 を返します。
OFFSET と MATCH を組み合わせて“動く開始位置”
「特定の値が見つかった行から、下に5行の範囲」を参照
A列に商品コード、B列に数量があるとします。
E2 の商品コードが見つかった行から、下5行の数量を合計:
=SUM(OFFSET(B1, MATCH(E2, A:A, 0), 0, 5, 1))
- MATCH で「E2 が A列の何行目か」を取得
- OFFSET の行方向にその値を入れる
→ 該当行から5行分の数量を SUM
OFFSET の注意点
計算が重くなることがある
OFFSET は「動的に範囲を返す」ため、
大量に使うと計算が遅くなることがあります。
参照が分かりにくくなる
OFFSET は“どこを参照しているか”が見えにくいので、
コメントや名前定義を使うと管理しやすくなります。
代替として INDEX を使うことも多い
OFFSET は便利ですが、
「非揮発性(再計算が軽い)」という理由で INDEX を使う人も多いです。
例題
問題1: A1 を基準に「2行下・1列右」のセルを参照する式を B1 に書いてください。
=OFFSET(A1, 2, 1)
問題2: A2:A100 にデータがあり、B1 に「データ件数」が入っています。A2 から B1 行分の合計を C1 に表示する式を書いてください。
=SUM(OFFSET(A1, 1, 0, B1, 1))
問題3: A列のデータの「最後の3件」だけを合計する式を D1 に書いてください(件数は COUNTA(A:A))。
=SUM(OFFSET(A1, COUNTA(A:A)-3+1, 0, 3, 1))
問題4: A列に商品コード、B列に数量があります。E2 の商品コードが見つかった行から下5行の数量を合計する式を F2 に書いてください。
=SUM(OFFSET(B1, MATCH(E2, A:A, 0), 0, 5, 1))
問題5: A1 を基準に、横方向に3列の範囲(A1:C1)を返す OFFSET を G1 に書いてください。
=OFFSET(A1, 0, 0, 1, 3)
まとめ
OFFSET は「基準セルからのずれ」で範囲を作る関数で、
可変範囲・最新データ・動く開始位置など、
“変化するデータ”に強いのが最大の特徴です。
OFFSET(基準, 行ずれ, 列ずれ, 高さ, 幅)- 行数が変わる表の合計
- 最新データの抽出
- MATCH と組み合わせて動的開始位置
- 横方向の可変範囲
- グラフの自動更新にも使える
このあたりを押さえておくと、
「データが増えても壊れない」「自動で追従する」
そんな“強いシート”が作れるようになります。
