この記事で分かること
- OFFSET関数が基準セルから指定した行・列だけ離れた範囲を返す仕組みと、代表的な使い方
- 整数設例でローリング合計を作り、手計算で検算する方法
- 「揮発性関数」とは何か、なぜOFFSETを多用するとモデルが重くなるのか
- INDEX関数という非揮発性の代替手段と、実務での使い分け
30秒で分かる定義
OFFSET関数とは、基準となるセルから指定した行数・列数だけ離れた位置のセルまたはセル範囲を返す関数です。読み方はオフセット。高さ・幅の引数を指定すれば、範囲のサイズ自体を可変にすることもできます。ローリング合計(直近N期間の合計)や、行数が変動する集計範囲の作成に使われますが、揮発性関数(volatile function)と呼ばれる特殊な性質を持ち、ワークシート内のどこか1か所でも変更があるたびに、自身の参照先が変わっていなくても再計算される点が特徴です。
なぜ実務で重要なのか
財務モデルでは「直近12か月合計」「直近3期間平均」のように、期間の範囲がモデルの進行に応じて動く集計が頻繁に登場します。OFFSET関数はこうした動的な範囲を1つの数式で表現できる便利さがある一方、揮発性という性質のためモデル全体の再計算速度を落とす原因にもなります。INDEX/MATCH実践で扱うINDEX関数は同じ動的範囲を非揮発性で実現できるため、大規模モデルを組む現場ではOFFSETをどこまで許容するかがモデルの設計方針として明文化されることがあります。
計算式(または仕組み)
基準セルから「行数」分下(負の値なら上)、「列数」分右(負の値なら左)に移動した位置を起点に、「高さ」行×「幅」列の範囲を返します。高さ・幅を省略すると基準セルと同じ1行1列になります。直近N期間のローリング合計の典型形は次のとおりです。
OFFSETのほかに、INDIRECT・NOW・TODAY・RAND・RANDBETWEENなども揮発性関数に分類されます。これらは値が変わりうる、または参照先が文字列から動的に決まるといった性質上、再計算のたびに評価し直す必要があるためです。
整数設例で確認する
設例(架空数値)。1月から6月までの月次売上高(単位:百万円)がB2:G2に「10, 12, 9, 14, 11, 13」と入力されています。6月を基準に直近3か月(4〜6月)のローリング合計を求めます。手計算では14+11+13=38百万円です。
6月のセルをG2とすると、数式は=SUM(OFFSET(G2,0,-2,1,3))です。基準セルG2から列方向に−2(2列左=E2)へ移動し、そこを起点に高さ1行×幅3列(E2:G2)の範囲を合計します。E列は4月(14)、F列は5月(11)、G列は6月(13)に対応するため、合計は14+11+13=38百万円となり、手計算と一致します。
財務モデルでの位置付け
OFFSETは、モデルの中でも「直近何期間か」という可変長の集計範囲を扱う場面に限定して登場する関数です。四半期モデルや月次モデルのように四半期・月次モデルへの展開を行うと、期間軸が長くなり同種のローリング計算のセル数も増えるため、OFFSETを多用した場合の再計算負荷がより顕著になります。
財務モデル・Excelでの使い方
- OFFSETはワークシート内のどこか1つでもセルが変更されるたびに再計算される。数百〜数千行規模のモデルに多数散らばっていると、無関係なセルの入力だけで再計算に時間がかかる
- 同じ動的範囲は非揮発性のINDEXでも実現できる。直近3か月合計は
=SUM(INDEX(B2:G2,1,4):INDEX(B2:G2,1,6))のように、範囲の開始・終了位置をINDEXで指定し「:」で結ぶ形に置き換えられる - ローリング計算を頻繁に使う場合は、計算方法を「自動」から「手動」に切り替え、必要なタイミングでF9キーにより再計算する運用も検討する
- ダッシュボードの「直近N期間だけ表示する」チャート範囲指定にOFFSETが使われることもあるが、動的配列関数で代替できるケースが増えている
この用語をExcelで「組める」状態にする
ローリング合計をOFFSETとINDEXの両方で実装し、揮発性の有無によるモデルの重さの違いを体感できるようになる。
実務家が確認するポイントとよくある誤解
誤解1:「OFFSETは唯一、動的な範囲を作れる関数」→ INDEXや動的配列関数でも同様の可変範囲を非揮発性で実現できます。OFFSETが優れているのは「基準セルからの相対位置」で直感的に組みやすい点です。
誤解2:「揮発性関数は数個なら問題ない」→ 単体では影響は小さいですが、月次・四半期モデルでOFFSETが数百か所に散らばると、無関係なセルの変更のたびに再計算が走り、体感できる遅さにつながります。
誤解3:「OFFSET関数自体が常に遅い」→ 問題は関数の計算コストではなく揮発性という性質にあります。参照先が変わっていなくても毎回再評価される点が、非揮発性の関数との本質的な違いです。
確認ポイント:受け取ったモデルが重いと感じたら、数式内でOFFSET・INDIRECTを検索し、使用箇所と件数を確認します。
日本実務での扱い
投資銀行やPEファンドのモデリング標準(スタイルガイド)では、OFFSETやINDIRECTといった揮発性関数の使用を制限するルールを設けている会社が少なくありません。これは会計基準や法令ではなく各社が経験的に積み上げてきたモデル設計の作法であり、モデルレビューの場で使用箇所を洗い出し非揮発性の代替へ置き換えることを求められる場合があります。行数の多い四半期・月次モデルほどこの制約は厳しくなる傾向があり、日本国内のIBD・PEファンドでも同様の運用が一般的です。
面接・モデルテストで問われるポイント
Q:OFFSET関数はなぜモデルを重くすると言われるのですか?また代替手段を挙げてください。
「OFFSETは揮発性関数のため、参照先セルが変わっていなくてもワークシート内のどこかでセルが変更されるたびに再計算されます。行数の多いモデルで多用すると、無関係な入力のたびに再計算が発生しモデル全体が重くなります。代替として、同じ可変長の範囲をINDEX関数の組み合わせで非揮発性に実装できます。」
深掘りでは、他の揮発性関数(INDIRECT・NOW・TODAY)を避けられない正当な使用場面が問われます。
よくある質問(FAQ)
Q. OFFSET関数とINDEX関数の違いは何ですか?
A. OFFSETは基準セルから移動した「参照」を動的に生成する揮発性関数で、参照先が変わっていなくても再計算されます。INDEXは範囲内の位置(行・列番号)から値や参照を返す非揮発性の関数で、参照している値が実際に変わったときだけ再計算されます。可変長の集計範囲では機能的に近いですが、負荷の面でINDEXが優れています。
Q. 揮発性関数をどうしても使わざるを得ない場面はありますか?
A. NOW関数やTODAY関数のように「常に現在時刻・日付を反映する」ことが目的の関数は、性質上揮発性であることが必要です。こうした場合を除き、非揮発性の代替を優先するのが安全です。
出典・参考(2026-07-21確認)
- Microsoft サポート(OFFSET関数のリファレンス、引数の仕様) https://support.microsoft.com/
- ICAEW「Twenty principles for good spreadsheet practice」(揮発性関数の使用を避ける設計指針) https://www.icaew.com/
※本記事は教育目的の一般的な解説であり、法務・税務・投資助言ではありません。設例は理解のための架空数値です。