教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

ExcelのOFFSET関数の使い方

構文

構文は以下の通りです。

=OFFSET(基準セル, 行のオフセット, 列のオフセット, [高さ], [幅])

解説

OFFSET関数は、基準セルから指定した実行数・列数だけ離れたセルや範囲を動的に取得できる便利な関数です。

引数 内容
基準セル 開始地点となるセルを指定します。
行のオフセット 基準セルから何行離れた割り当てを指定します。正の数値で下方向、負の数値で上方向へ移動します。
列のオフセット 基準セルから何列離れた位置を指定します。正の数値で右方向、負の数値で左方向へ移動します。
高さ オプションの引数で、返される範囲の高さ(行数)を指定します。省略した場合は 1 行が返されます。
オプションの引数で、返される範囲の幅(列数)を指定します。省略した場合は 1 列が返されます。

使用例

(例1)基本的な使用例

=OFFSET(A1, 2, 3)

・基準セル: A1(セルA1がスタート地点になります)
・行のオフセット: 2(基準セルから2行下に移動)
・列のオフセット: 3(基準セルから3列右に移動)

この場合、A1から2行下に行くと「A3」、さらに3列右に移動すると「D3」になります。A1には「100」という値があり、D3には「200」という値があります。この関数を実行すると、D3の値「200」が返されます。単純に1つのセルを指定しますしたい場合に便利です。

(例2)高さと幅を指定する例

=OFFSET(A1, 1, 1, 2, 2)

・基準セル: A1
・行のオフセット: 1(基準セルから1行下に移動 → B2)
・列のオフセット: 1(基準セルから1列右に移動 → B2)
・高さ: 2(2行分の範囲を取得 → B2から下に2行分)
・幅: 2(2列の範囲を取得 → B2から右に2列分)

この場合、B2を基準として、B2からC3までの2行×2列の範囲が返されます。
例えば、次のようなデータがあります。

100 110 120 130
200 210 220 230
300 310 320 330
400 410 420 430

A1に「100」、A2に「200」、B2に「210」、C2に「220」...というデータがある場合、このOFFSET(A1, 1, 1, 2, 2)は、セル範囲B2:C3である次の値を返します。

210 220
310 320

このように、範囲を指定してデータを動的に取得できるので、特定の部分データを抽出したい場合に便利です。グラフのデータ範囲を動的に設定する際にこの方法を使うことができます。

(例3)グラフに活用する例

例えば、次のようなデータがあります。

売上
1月 110
2月 120
3月 130
4月 140
5月 150

表示する範囲を毎月増やしていくには、OFFSET関数を使って範囲を動的に指定します。

=OFFSET(B1, 1, 0, COUNTA(B:B)-1, 1)

・基準セル:B1(「売上」というヘッダーセル)
・行のオフセット: 1(B1から1行下、詰B2からスタート)
・列のオフセット: 0(そのままB列を指定)
・高さ: COUNTA(B:B)-1(B列のデータ数からヘッダー分を着た数)
・幅:1(1列のデータを取得)

これにより、B列のデータが自動的にカウントされ、売上データに基づいてグラフ範囲が動的に更新されます。

まとめ

OFFSET関数は、オプションで高さや幅を指定することで、複数セルの範囲を取得することも可能です。応用例として、データの一部を動的に参照したり、グラフのデータ範囲を自動更新する場合に利用されます。