Excelをはじめ、さまざまなツールで「オフセット関数」という表現が使われますが、具体的な使い方がわからないという方も多いでしょう。
本記事では、オフセット関数(OFFSET関数)の意味・計算方法・Excelや各種アプリでの使い方・数式への応用をわかりやすく解説していきます。
オフセット関数を実務に活かしたい方はぜひ最後までご覧ください。
オフセット関数とは?基本的な意味と使い方
それではまず、オフセット関数の基本的な意味と使い方について解説していきます。
オフセット関数(OFFSET関数)とは、基準となるセルまたは範囲から指定した行数・列数だけ移動した位置のセルまたは範囲を参照する関数です。
前記事でも解説したとおり、書式は次のとおりです。
=OFFSET(基準, 行数, 列数, [高さ], [幅])
オフセット関数の基本的なユースケースは「参照位置を動的に変えたい場合」です。
固定的なセル参照(例:=A5)では対応できない動的な集計・参照にOFFSET関数が非常に有効です。
Excelでのオフセット関数の計算例
【オフセット関数の計算例】
データがA1:A12(1月〜12月)に入力されている場合
最新月(12月)の値を返す:
=OFFSET(A1, 11, 0) → A12の値(12月)
直近3か月の合計:
=SUM(OFFSET(A12, 0, 0, -3, 1)) → A10:A12の合計
現在の行から2行上の値:
=OFFSET(A5, -2, 0) → A3の値
行数・列数にマイナスを指定することで上・左方向への参照も可能です。
OFFSET関数を使った動的グラフ範囲
OFFSET関数の代表的な応用例が「動的グラフ範囲」の設定です。
データが追加されるたびにグラフの範囲が自動で広がるように、名前定義とOFFSET関数を組み合わせます。
【名前定義とOFFSETの組み合わせ(動的グラフ範囲)】
名前:DataRange
参照範囲:=OFFSET(Sheet1!$A$1, 0, 0, COUNTA(Sheet1!$A:$A), 1)
→ A列のデータが追加されるたびに自動でグラフ範囲が拡張される
COUNTA関数(空白でないセルをカウント)と組み合わせることでデータ行数に合わせて自動で範囲が変化するグラフを作れます。
スプレッドシート(Google Sheets)でのOFFSET関数
Google スプレッドシートでも同じ構文でOFFSET関数が使えます。
=OFFSET(A1, 2, 1) のように書くことでA1から2行下・1列右のセル(B3)を参照できます。
Excelとの互換性が高く、ExcelのOFFSET数式はほぼそのままGoogleスプレッドシートでも動作します。
各種アプリ・プログラミングでのオフセット関数的な概念
続いては、Excel以外のアプリやプログラミングでのオフセット関数的な概念を確認していきます。
Power BI・Tableau でのオフセット計算
BIツールのPower BI(DAX)やTableauでも、期間比較・前期比・移動平均などにオフセット的な計算が使われます。
DAX関数の DATEADD・PARALLELPERIOD はタイムインテリジェンスのオフセット計算に相当します。
Tableauの LOOKUP 関数は指定した行数だけオフセットした値を参照する関数です。
Pythonのpandasでのオフセット計算
Pythonのpandasライブラリでは .shift() メソッドがオフセット関数に相当します。
【pandasでのshift()(オフセット)】
import pandas as pd
df[‘前期比’] = df[‘売上’] / df[‘売上’].shift(1) – 1
# df[‘売上’].shift(1) で1行前の値にアクセスできる
pandas の shift() は時系列データの前後比較・移動平均計算などで頻繁に使われます。
SQLでのオフセット(LAG・LEAD関数)
SQLでも同様のオフセット計算ができます。
ウィンドウ関数の LAG(前の行の値を参照)と LEAD(次の行の値を参照)がオフセット関数に相当します。
【SQLでのLAG関数(前行参照)】
SELECT
date,
sales,
LAG(sales, 1) OVER (ORDER BY date) AS prev_sales,
sales – LAG(sales, 1) OVER (ORDER BY date) AS diff
FROM sales_table;
LAG・LEAD関数を使うことでSQLで前後行との差分・前期比を計算できます。
オフセット関数を使ったより高度な数式
続いては、OFFSET関数を使ったより高度な数式の活用を確認していきます。
OFFSET + MATCH による2次元の検索
OFFSET関数とMATCH関数を組み合わせることで、VLOOKUPより柔軟な2次元検索が実現できます。
【OFFSET + MATCH による2次元検索】
=OFFSET($A$1, MATCH(E1,$A$2:$A$10,0), MATCH(F1,$B$1:$D$1,0))
→ E1で指定した行・F1で指定した列に交差するセルの値を返す
VLOOKUP・HLOOKUPでは難しい「縦横の2次元検索」がOFFSET+MATCHで実現できます。
OFFSET + COUNTA による自動拡張範囲
OFFSET関数とCOUNTA(空白でないセルのカウント)を組み合わせることで、データが追加されるたびに自動で集計範囲が広がる数式が作れます。
プルダウンリストのデータソースを動的にする用途でも活用されます。
まとめ
本記事では、オフセット関数の意味・基本的な計算例・動的グラフ範囲・GoogleスプレッドシートやBI・Python・SQLでの応用まで詳しく解説しました。
オフセット関数は動的な参照・集計・グラフ範囲の設定に非常に便利な関数であり、Excel・Google Sheets・BIツール・プログラミングと幅広く活用できます。
OFFSET関数をMATCH・COUNTA・COUNTIFなどと組み合わせることで、高度な動的数式が実現でき業務効率が大幅に向上します。
ぜひ本記事を参考に、オフセット関数を実務に役立ててみてください。