PR

【Excel】OFFSET関数の仕組みと使い方|動的な参照範囲で作業効率をUp!

Excel
記事内に広告が含まれています。

エクセルで作業をしていると、

直近1週間の平均を出したい!
だけど、データ行が増えていくから毎回参照範囲を変えるのがめんどい。。。

とか、

グラフの対象を常に最新データだけにしておきたい!
でもどうやればいいか分からない。。。

など、このような悩みを持ったことはないでしょうか?

そんなときに役立つのが、OFFSET関数です!

「OFFSET関数?聞いたことないな~。。。」
「聞いたことはあるんだけど、使い方はイマイチ分からないんだよね。。。」

という方でも大丈夫!

OFFSET関数は少しクセのある関数ですが、使いこなせれば作業の自動化・効率化がアップする便利な関数です!

この記事では、OFFSET関数の基本構文から応用例まで、分かりやすく解説していきます!
ぜひ一度目を通していただけると嬉しいです!

OFFSET関数って何?

OFFSET関数は、エクセルで指定したセルを基準にして、行数や列数を指定してその先のセルを参照する関数です。

例えば、あるセルから数行下や数列右にあるセルを動的に参照することができます。
データの範囲が変わる場合や、データが追加される場合でも、OFFSET関数を使うことで柔軟に対応できます。

OFFSET関数の基本構文

OFFSET関数の引数は以下の通りとなっています。

=OFFSET(参照セル,行数,列数,[高さ],[幅])

それぞれの説明は以下の通りです!

引数説明
参照セル基準となるセル
行数参照セルから何行移動するかを指定
列数参照セルから何列移動するかを指定
高さ(省略可能)取得する範囲の行数 ※デフォルトは1行
幅(省略可能)取得する範囲の列数 ※デフォルトは1列

とは言っても、文字だけだといまいちピンときませんよね。

下の図では、セルB5でOFFSET関数を使い、
・A1セルから、2行下→3列右に移動した結果(=セルD3)
を表示してみました。

すると、

offset_explanation

ちゃんとセルB5に、セルD3の値(ゴール!)が表示されました。

あ、OFFSET関数ってこんな動きをするんだな!

とイメージしていただければOKです!

OFFSET関数の注意点・エラー対処法

上記のとおり、OFFSET関数は基準点から指定した行・列分移動するという関数です。
便利な関数ですが、参照範囲がずれるというエラーが発生しがちな関数でもあります。

よくあるのが、以下2つのエラーですね。
指定する行数・列数を見直せば解消するケースがほとんどかと思います。

後ほどOFFSET関数の活用例を紹介しますが、他の関数と組み合わせることで、値がずれることを防ぎやすくなります。

エラー内容原因対処法
#REF!範囲外に参照してしまっている行数・列数を見直す
値がずれる行・列分の指定が合っていない基準セルとずらし方を再確認

※範囲外の参照は、行・列をマイナス値で指定するときに発生することが多いかな~という印象です。
・行をマイナス値で指定 → 基準値より上の行に移動
・列をマイナス値で指定 → 基準値より左の列に移動

OFFSET関数を使うメリットは?

その前に、OFFSET関数ってどのような使い方ができるの?と思いますよね。
実はOFFSET関数は様々な場面で活用できる、汎用性の高い関数です!

実際にどのようなメリットがあるか、紹介していきます。

セル範囲を動的に扱うことができる!

OFFSET関数のメリットは、セル範囲を動的に扱うことができることです!

どういうことかというと、例えば行数にセルA1を入力した場合、
・セルA1が「3」であれば3行目
・セルA1を「5」に打ち換えたら5行目
といった感じで、参照先を変えることができるということです。

どのように設定したらよいか、「単一のセルを参照する場合」で詳しく紹介します!

複数セルの範囲を簡単に指定できる!

OFFSET関数は、単一のセルだけでなく、複数セルを参照することができます!

OFFSET関数の引数に、「高さ」と「幅」があり、
・高さ = 行数
・幅 = 列数
として、参照範囲から指定した行数分・列数分の範囲が指定できるようになっています。

こちらは、「複数のセルを参照する場合」で設定方法を紹介します!

他の関数との組み合わせで、さらに強力な使い方が可能に!

OFFSET関数だけでも便利なのですが、他の関数と組み合わせると更に強力に!

OFFSET関数はセル範囲を動的に扱えるため、
・参照範囲の計算ができる
・データ件数が増減しても、自動で参照範囲を変えてくれる
・データが増えても、必ず直近7日間の平均を求めるなど、対象を自動で変えてくれる
など、非常に汎用性の高い、強力なツールとなります。

いくつかパターンを紹介します。
詳しくは、「他の関数との組み合わせで、更に便利になる!」で紹介していきます!

OFFSET関数の使い方

こちらでは、「単一のセルを参照する場合」、「複数のセルを参照する場合」、「他の関数と組み合わせることができる」の順に紹介します!

単一のセルを参照する場合

■単一のセルを参照する場合

例えばセルB3に、セルD6を基準としてセルH8を参照したい場合、どのように入力したらいいでしょうか?

offset_single-reference_No1

この場合、基準のセル(D6)より下へ2行・右に4列移動すれば、セルH8を参照できます。
そのため、下のようにOFFSET関数を入力すると、結果を反映することができます!

=OFFSET(D6,2,4)
※今回は行数・列数を表示しているため、=OFFSET(D6,C8,H5)でも同じ結果を反映できます。

こちらを入力すると、D6セルから2行下・4列右にあるセル(H8セル)の値を取得できます!

offset_single-reference_No2

複数のセルを参照する場合

■複数のセルを参照する場合

次は複数セルを参照するケースです。
実は単一セルだけだはなく、複数のセルを反映することも可能なんです!

セルB3に、セルD6を基準としてセルH8から2行×2列の範囲を参照したい場合、どのように入力したらいいでしょうか?

offset_multiple-reference_No1

この場合、基準のセル(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_multiple-reference_No2

他の関数との組み合わせで、更に便利になる!

■他の関数と組み合わせることもできる!

OFFSET関数が便利な点は、他の関数との組み合わせにより、動的な範囲を計算することができることです!これは本当に便利な使い方ができます。

SUM関数と組み合わせて、参照範囲の合計を計算する

例えば、先ほどセルH8から2行×2列の範囲を参照しましたが、SUM関数と組み合わせることで、この範囲を合計することも可能です。

offset_combination-reference_SUM_No1

先ほどと同じように、セルH8から2行×2列分の範囲を参照します。
その参照結果を、SUM関数にて計算します。

=SUM(OFFSET(D6,2,4,2,2))
※表示している行数・列数を参照しており、=SUM(OFFSET(D6,C8,H5,2,2))でも同じ結果になります。

こちらを入力すると、D6セルから2行下・4列右にあるセル(H8セル)から、2行×2列の範囲を参照し、その足し算の結果を返します!

offset_combination-reference_SUM_No2

COUNTA関数と組み合わせることで、参照範囲を自動で設定する

COUNTA関数と組み合わせると、参照範囲を自動で変更することができるので、とても便利です!

例えば、下のようにB1~B10の範囲に数字があったとき、「=SUM(B1:B10)」で計算できます。

offset_combination-reference_SUM×COUNTA_No1

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

offset_combination-reference_SUM×COUNTA_No2

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

offset_combination-reference_SUM×COUNTA_No3

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

offset_combination-reference_SUM×COUNTA_No4

データの増減があったときは手動で範囲を変更しなくても済むため、非常に便利です!

COUNTA × AVERAGE関数で、直近1週間の平均を計算することも可能

COUNTA関数とAVERAGE関数を組み合わせることで、参照範囲の平均を計算することができます。
ただ少しアレンジするだけで、直近1週間の平均を計算するなど柔軟なデータ集計が可能となります!

下の図は、1日からのアクセス数を集計したものとなります。
C列は分かりやすいように、直近1週間で計算した平均数を参考として表示しています。

この表では、一番下のほうにあるアクセス数が直近のものとなりますので、COUNTA関数から7を引いてあげると、直近一週間の平均アクセス数を計算することができます。
※1行目に項目名があるため、今回は更にプラス1した数(=8)を引いています。

offset_combination-reference_AVERAGE×COUNTA_No1

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

offset_combination-reference_AVERAGE×COUNTA_No2

ちゃんと直近1週間の平均が計算されました!
応用が利く組み合わせなので、データの増減にはぜひ活用してみてください。

COLUMN(ROW) × OFFSET関数で、参照範囲も柔軟に変更できる!

エクセルにはCOLUMN関数(もしくはROW関数)があり、対象の列番号(行番号)を取得できます。
こちらを組み合わせると、参照範囲をさらに柔軟に変更することができます!

例えば、「サービスに申し込んだときに、1年間割引キャンペーンを受けることができる」とします。

キャンペーン対象件数を累計で計算していくとき、
・11か月目までは、毎月のサービス申し込み件数を全件足し算する
・12か月目以降は、直近12か月分のサービス申し込み件数を足し算する

と分けて計算する必要が出てきます。

COLUMN×OFFSET関数の組み合わせで、この計算ができるようになります!
どのようなイメージになるか、実際に計算した結果を表示します。
※「★列数」と「★範囲」は、計算式が分かりやすいように表示しています。

offset_combination-reference_COLUMN×OFFSET_No1
=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関数は、範囲が変化するような状況に柔軟に対応できる強力な関数です!
グラフやピボットテーブル、条件付き書式などとの組み合わで、さらに便利に活用できます。
是非、日常的に使うデータ処理や集計作業に取り入れて、作業効率をアップされてください!

この記事が役に立ったと思った場合、ブックマークやシェアしてもらえると嬉しいです。
また、質問やこんな方法を紹介してほしい!などありましたら、お気軽にコメントしてください。

最後まで読んでいただき、ありがとうございました!

ろじゃー

仕事・子育てに奮闘中の社会人です。
仕事でも日常生活でも、ちょっとでも便利になることが紹介できるブログを書いています!
 
仕事柄、PC操作やエクセル、VBAなどは得意です!
Excel歴は10年以上の事務職。
関数やVBAを活用して、資料作成やデータ分析をはじめとした様々な業務の効率化・自動化に取り組んできました。
 
このブログでは、実際の業務で使える効率化テクニックを発信しています。
「わからない」や「困った」など問題を抱える方や、もっと効率化したいと思っている方に、少しでも役立てれば幸いです!

ご質問・ご相談など、お気軽にご連絡ください。

ろじゃーをフォローする
ご質問・ご相談はこちらへ!
 Roger|日々、ちょっとずつ良くなることを目指すブロガー
Excel歴10年以上。VBAや関数、業務効率化などを発信中。
📩 お問い合わせはこちら
Excel
シェアする
ろじゃーをフォローする

コメント

タイトルとURLをコピーしました