エクセルで作業をしていると、このような悩みを持ったことはないでしょうか?
・行や列を動かして参照したいけど、関数でどうすればいいか分からない。。
・OFFSET関数って便利そうだけど、どう使っていいかイマイチ分からない。。
・OFFSET関数の便利な活用方法を知りたい!
OFFSET関数って、便利そうだなと思う反面、使い方が難しそうだなって感じますよね。
やっていることは理解できるけど、イマイチ活用方法がイメージできなかったり。。
私も、最初はINDEX関数でいいのでは?と思っていました。(今考えると浅はかでした。。)
でも、もう大丈夫!
この記事では、これらの問題を解決に導くテクニックを紹介します!
「OFFSET関数ってどう使ったらいいか分からない。。」
「OFFSET関数を使いこなして、作業効率をグンとアップしたい!」と思っている方!
ぜひ一度目を通していただけると嬉しいです!
OFFSET関数って何?
OFFSET関数は、エクセルで指定したセルを基準にして、行数や列数を指定してその先のセルを参照する関数です。例えば、あるセルから数行下や数列右にあるセルを動的に参照することができます。データの範囲が変わる場合や、データが追加される場合でも、OFFSET関数を使うことで柔軟に対応できます。
=OFFSET(参照セル,行数,列数,[高さ],[幅])
それぞれの説明は以下の通りです!
引数 | 説明 |
参照セル | 基準となるセル |
行数 | 参照セルから何行移動するかを指定 |
列数 | 参照セルから何列移動するかを指定 |
高さ(省略可能) | 取得する範囲の行数 ※デフォルトは1行 |
幅(省略可能) | 取得する範囲の列数 ※デフォルトは1列 |
とは言っても、文字だけだといまいちピンときませんよね。
実際にOFFSET関数を使ってみて、どのような結果が反映されるか見ていきましょう!
OFFSET関数を使うメリットは?
その前に、OFFSET関数ってどのような使い方ができるの?と思いますよね。
実はOFFSET関数は様々な場面で活用できる、汎用性の高い関数です!
実際にどのようなメリットがあるか、紹介していきます。
セル範囲を動的に扱うことができる!
OFFSET関数のメリットは、セル範囲を動的に扱うことができることです!
どういうことかというと、例えば行数にセルA1を入力した場合、
・セルA1が「3」であれば3行目
・セルA1を「5」に打ち換えたら5行目
といった感じで、参照先を変えることができるということです。
どのように設定したらよいか、「単一のセルを参照する場合」で詳しく紹介します!
複数セルの範囲を簡単に指定できる!
OFFSET関数は、単一のセルだけでなく、複数セルを参照することができます!
OFFSET関数の引数に、「高さ」と「幅」があり、
・高さ = 行数
・幅 = 列数
として、参照範囲から指定した行数分・列数分の範囲が指定できるようになっています。
こちらは、「複数のセルを参照する場合」で設定方法を紹介します!
他の関数との組み合わせで、さらに強力な使い方が可能に!
OFFSET関数だけでも便利なのですが、他の関数と組み合わせると更に強力に!
OFFSET関数はセル範囲を動的に扱えるため、
・参照範囲の計算ができる
・データ件数が増減しても、自動で参照範囲を変えてくれる
・データが増えても、必ず直近7日間の平均を求めるなど、対象を自動で変えてくれる
など、非常に汎用性の高い、強力なツールとなります。
いくつかパターンを紹介します。
詳しくは、「他の関数との組み合わせで、更に便利になる!」で紹介していきます!
OFFSET関数の使い方
こちらでは、「単一のセルを参照する場合」、「複数のセルを参照する場合」、「他の関数と組み合わせることができる」の順に紹介します!
単一のセルを参照する場合
■単一のセルを参照する場合
例えばセルB3に、セルD6を基準としてセルH8を参照したい場合、どのように入力したらいいでしょうか?

この場合、基準のセル(D6)より下へ2行・右に4列移動すれば、セルH8を参照できます。
そのため、下のようにOFFSET関数を入力すると、結果を反映することができます!
=OFFSET(D6,2,4)
※今回は行数・列数を表示しているため、=OFFSET(D6,C8,H5)でも同じ結果を反映できます。
こちらを入力すると、D6セルから2行下・4列右にあるセル(H8セル)の値を取得できます!

複数のセルを参照する場合
■複数のセルを参照する場合
次は複数セルを参照するケースです。
実は単一セルだけだはなく、複数のセルを反映することも可能なんです!
セルB3に、セルD6を基準としてセルH8から2行×2列の範囲を参照したい場合、どのように入力したらいいでしょうか?

この場合、基準のセル(D6)より下へ2行・右に4列移動すれば、セルH8を参照できます。
そこから2行×2列分の範囲を取得するため、下のようにOFFSET関数を入力します。
=OFFSET(D6,2,4,2,2)
※今回は行数・列数を表示しているため、=OFFSET(D6,C8,H5,2,2)でも同じ結果を反映できます。
こちらを入力すると、D6セルから2行下・4列右にあるセル(H8セル)から、2行×2列の範囲を参照することができます!

他の関数との組み合わせで、更に便利になる!
■他の関数と組み合わせることもできる!
OFFSET関数が便利な点は、他の関数との組み合わせにより、動的な範囲を計算することができることです!これは本当に便利な使い方ができます。
SUM関数と組み合わせて、参照範囲の合計を計算する
例えば、先ほどセルH8から2行×2列の範囲を参照しましたが、SUM関数と組み合わせることで、この範囲を合計することも可能です。

先ほどと同じように、セルH8から2行×2列分の範囲を参照します。
その参照結果を、SUM関数にて計算します。
=SUM(OFFSET(D6,2,4,2,2))
※表示している行数・列数を参照しており、=SUM(OFFSET(D6,C8,H5,2,2))でも同じ結果になります。
こちらを入力すると、D6セルから2行下・4列右にあるセル(H8セル)から、2行×2列の範囲を参照し、その足し算の結果を返します!

COUNTA関数と組み合わせることで、参照範囲を自動で設定する
COUNTA関数と組み合わせると、参照範囲を自動で変更することができるので、とても便利です!
例えば、下のようにB1~B10の範囲に数字があったとき、「=SUM(B1:B10)」で計算できます。

そこで、11行目にデータを追加してみましょう。
データを追加しても、SUMの参照範囲は変わらないため、11行目は計算結果に含まれません。。

そこで、OFFSET×COUNTAの登場です。
まずは同じように、10行目までのデータで見てみると、SUMと同じく10行目まで計算されていることが確認できます。

では、11行目にデータを追加してみましょう。
参照範囲が自動で変わり、11行目も計算結果に反映されました!

データの増減があったときは手動で範囲を変更しなくても済むため、非常に便利です!
COUNTA × AVERAGE関数で、直近1週間の平均を計算することも可能
COUNTA関数とAVERAGE関数を組み合わせることで、参照範囲の平均を計算することができます。
ただ少しアレンジするだけで、直近1週間の平均を計算するなど柔軟なデータ集計が可能となります!
下の図は、1日からのアクセス数を集計したものとなります。
C列は分かりやすいように、直近1週間で計算した平均数を参考として表示しています。
この表では、一番下のほうにあるアクセス数が直近のものとなりますので、COUNTA関数から7を引いてあげると、直近一週間の平均アクセス数を計算することができます。
※1行目に項目名があるため、今回は更にプラス1した数(=8)を引いています。

では、今度は一行データを加えてみます。
ちゃんと計算されるでしょうか。。

ちゃんと直近1週間の平均が計算されました!
応用が利く組み合わせなので、データの増減にはぜひ活用してみてください。
COLUMN(ROW) × OFFSET関数で、参照範囲も柔軟に変更できる!
エクセルにはCOLUMN関数(もしくはROW関数)があり、対象の列番号(行番号)を取得できます。
こちらを組み合わせると、参照範囲をさらに柔軟に変更することができます!
例えば、「サービスに申し込んだときに、1年間割引キャンペーンを受けることができる」とします。
キャンペーン対象件数を累計で計算していくとき、
・11か月目までは、毎月のサービス申し込み件数を全件足し算する
・12か月目以降は、直近12か月分のサービス申し込み件数を足し算する
と分けて計算する必要が出てきます。
COLUMN×OFFSET関数の組み合わせで、この計算ができるようになります!
どのようなイメージになるか、実際に計算した結果を表示します。
※「★列数」と「★範囲」は、計算式が分かりやすいように表示しています。

=IF(COLUMN()>=13,SUM(OFFSET($B8,0,COLUMN()-13,1,12)),SUM(OFFSET($B8,0,0,1,COLUMN()-1)))
'実際に使用するファイルに合わせて、参照セル・列番号は修正してください。
解説していくと、
a)対象セルが13列目かどうかで計算方法を変更する(1列目に項目名があるため、12+1=13を指定)
b)13列目以降であれば、列番号から13引いたところから12列分を合計
c)13列目未満であれば、B列~列番号から1引いた列数分を合計
という計算を行っています。
例えば、
・2026年3月(16列目):セルB8から3列移動、そこから12列分を合計(=セルE8:P8を合計)
・2025年6月(7列目):セルB8から0列移動、そこから6列分を合計(=セルB8:G8を合計)
という感じで計算をしています。
少し複雑にはなってしまいましたが、OFFSET×関数の組み合わせが非常に有効な方法であることはご認識いただけたかと思います。
まとめ:OFFSET関数は超便利!使いこなすことで、さらに業務の効率化ができる!
OFFSET関数を使えば、セルから離れた位置にあるデータを簡単に参照したり、動的にデータ範囲を設定することができます。
グラフやピボットテーブル、条件付き書式などと組み合わせると、さらに便利に活用することができます!。
是非、日常的に使うデータ処理や集計作業に取り入れて、作業効率をアップされてください!
最後まで読んでいただき、ありがとうございました!
コメント