ExcelのOFFSET関数は使い方を覚えると非常に便利な関数ですが、引数が多く「難しそう」と感じる方も多いでしょう。
本記事では、ExcelのOFFSET関数の意味・引数・使い方・実際の計算例・応用活用例をわかりやすく解説していきます。
Excelを使ったデータ集計・参照の効率化に役立てたい方はぜひ最後までご覧ください。
ExcelのOFFSET関数とは?基本的な意味と構文
それではまず、OFFSET関数の基本的な意味と構文について解説していきます。
OFFSET関数は「指定したセルまたは範囲を基準として、そこから指定した行数・列数だけずれた位置のセル(または範囲)を返す関数」です。
OFFSET関数の書式は次のとおりです。
【OFFSET関数の構文】
=OFFSET(基準, 行数, 列数, [高さ], [幅])
基準:基準となるセルまたは範囲(必須)
行数:基準から移動する行数(正は下・負は上)(必須)
列数:基準から移動する列数(正は右・負は左)(必須)
[高さ]:返す範囲の行数(省略時は1行)
[幅]:返す範囲の列数(省略時は1列)
最初の3つの引数(基準・行数・列数)は必須で、基準セルからどこに移動するかを指定します。
OFFSET関数の基本的な使い方
簡単な例で OFFSET関数の動作を確認しましょう。
【OFFSET関数の基本例】
A1=100, B1=200, A2=300, B2=400 のとき:
=OFFSET(A1, 0, 0) → 100(A1自身)
=OFFSET(A1, 1, 0) → 300(A1から1行下のA2)
=OFFSET(A1, 0, 1) → 200(A1から1列右のB1)
=OFFSET(A1, 1, 1) → 400(A1から1行下・1列右のB2)
=OFFSET(A1, -1, 0) → エラー(A1より1行上は存在しない)
行数・列数にマイナスを指定することで上・左への移動も可能ですが、シートの外に出る参照はエラー(#REF!)になります。
OFFSET関数で範囲を返す使い方
OFFSET関数の高さ・幅引数を使うことで、単一セルではなく範囲を返すことができます。
【OFFSET関数で範囲を指定する例】
=SUM(OFFSET(A1, 0, 0, 5, 1))
→ A1から始まる5行1列の範囲(A1:A5)の合計
=AVERAGE(OFFSET(B2, 0, 0, 1, 4))
→ B2から始まる1行4列の範囲(B2:E2)の平均
SUM・AVERAGE・COUNTなどの集計関数と組み合わせることで動的な範囲の集計が実現できます。
OFFSET関数の実践的な活用例
続いては、OFFSET関数の実践的な活用例を確認していきます。
動的な月次集計(直近n月の合計)
OFFSET関数の最も便利な使い方のひとつが「直近n月の合計」のような動的な集計です。
【直近3か月の合計を求める例】
A列に月次データが並んでいる場合、
最新月がA12のとき:
=SUM(OFFSET(A12, 0, 0, -3, 1))
→ A10:A12(A12から3行上までの3か月分)の合計
データが追加されても数式を変更せずに直近3か月の合計を自動計算できます。
ドロップダウンリストと連動した動的参照
OFFSET関数とMATCH関数を組み合わせることで、ドロップダウンリストの選択に連動した動的な参照が実現できます。
【ドロップダウンとOFFSETの組み合わせ例】
A列に商品名、B〜D列に月次データがある場合
選択した商品の行番号をMATCHで求めて、
=OFFSET($A$1, MATCH(E1, $A$1:$A$10, 0)-1, 1)
→ E1で選択した商品のB列データを返す
ドロップダウンリスト + OFFSET + MATCH の組み合わせはExcel上級テクニックとして非常に有用です。
INDIRECT関数との違い
動的な参照という点でOFFSET関数と似た機能を持つ関数にINDIRECT関数があります。
INDIRECT関数は文字列でセル参照を作成する関数で、OFFSET関数は位置(行・列のずれ)で参照を指定する関数です。
動的な位置参照にはOFFSET、シート名などの文字列で動的参照を作るにはINDIRECTが向いています。
OFFSET関数の注意点とパフォーマンス
続いては、OFFSET関数の注意点とパフォーマンスの問題を確認していきます。
揮発性関数としての注意
OFFSET関数は「揮発性関数(Volatile Function)」です。
揮発性関数はExcelのシートが再計算されるたびに(他のセルが変更されても)再評価されるため、OFFSET関数を大量に使うとシートの動作が重くなります。
大量データを扱う場合はINDEX関数(非揮発性)での代替を検討するとパフォーマンスが改善します。
INDEX関数との使い分け
INDEX関数もOFFSET関数と似た用途で使われますが、揮発性でないためパフォーマンスが優れています。
=OFFSET(A1, 2, 1) は =INDEX(A:B, 3, 2) で代替できる場合が多いです。
パフォーマンスが重要な場合はINDEX関数を使い、動的な範囲参照が必要な場合はOFFSET関数を使うという使い分けが一般的です。
#REF!エラーへの対処
OFFSET関数でシートの外を参照するとREFエラーが発生します。
IFERROR関数と組み合わせることでエラー時の表示を制御できます。
=IFERROR(OFFSET(A1, -1, 0), “範囲外”) のように使います。
まとめ
本記事では、ExcelのOFFSET関数の意味・構文・基本的な使い方・動的集計・ドロップダウンとの組み合わせ・揮発性の注意点まで詳しく解説しました。
OFFSET関数は基準セルからの行・列のずれで動的な参照・集計を実現できる強力な関数ですが、揮発性関数であるためパフォーマンスに注意が必要です。
OFFSET関数を使いこなすことで、データの追加・変更に自動対応する柔軟なExcel数式を作れます。
ぜひ本記事を参考に、OFFSET関数の活用に挑戦してみてください。