実務で覚えたいエクセルの関数の代表格のひとつであるOFFSET関数。エクセルに詳しい職場の人から「OFFSET関数便利だよ」などと言われたことがある人も少なくないかもしれません。エクセルも95の頃から常に進化を続け、テーブル機能の強化などでOFFSET関数への依存度は少なくなったとはいえ、使う場面は人によっては今も多くあるかもしれません。グーグルで検索すれば多くのサイトがヒットすると思います。
しかし、「この関数、説明を見てもいまいち良く理解できない。。。」。そんな方が多いのではないでしょうか?では、何故理解が難しいのでしょうか?
OFFSET関数が理解しにくい理由
OFFSET関数が理解しにくい理由として、主に2つの理由があるのではないかと思います。
- OFFSET関数そのものが理解しづらい
- OFFSET関数そのものが理解できても、その使い道がよくわからない
1.OFFSET関数の使い道
「OFFSET関数はある基準となるセルから行や列をずらして別のセルを参照したい時に使われます」というような説明がされることが多いと思います。それを聞いて「???。で、それはどうやって使うの?」とかその使い道をイメージできなくて「わけわからん」という状態に陥る方も少なくないのではないでしょうか?では、実務でどのような使い道があるのでしょうか?
私の経験では例えば下のような売上レポートのようなものや経理の人が作成するP&L(損益計算書)のようなものを作成したい時に威力を発揮すると思います。どの企業でも日々売上日報のようなものが各部署に配布されると思います。大抵は実績と予算、前年との比較やその日の売上と月の合計、その月の売上と年の累計など併記され、それを見て一喜一憂される方も少なくないのではないでしょうか?

上の例では、各商品の売上金額が入っているセル(黄色のセル→C列、D列、G列、J列、K列、N列)にはOFFSET関数が入っています。そしてセルC3に3という数字が入っています。(←K列が黄色くなっていませんでした。すみません)
黄色のセルに入っているOFFSET関数はこのC3のセルに入っている数字を読み、該当の月の数字を実績ならR列からT列の間、予算の数字ならV列からX列、前年の数字ならZ列からAB列の間でそれぞれ引っ張ってきているわけです。
例えばセルC7(商品Aの実績の数字)は、セルC3に3という数字が入っているのでR列からT列の中で3月の列(=T列)にある商品Aの金額、つまり1,500という数字(=セルT7)をセルC7に表示しているわけです。同様にセルC8:C10もT8:T10の数字を表示しています。D列はV列からX列を参照し、G列はZ列からAB列を参照しています。
セルC3の数字を2に変えればOFFSET関数は2月の数字をそれぞれ引っ張って来るので、セルC3の数字を変更するだけで売上レポートの数字は全て該当月の数字に変更でき、予実対比などもパッと確認することが出来る、そんな便利な関数なのがOFFSET関数です。
また、SUM関数を加えることで累計金額も自動で計算できます。上の画像で「年」のセクションはセルC3に3という数字が入っているのでJ列はR列からT列の数字の合計、K列はV列からX列の数字の合計、N列はZ列からAB列の数字の合計になります。
2. 「エクセルでなくてもERPや売上管理システムなどから簡単に出力できる」
「うちの会社ではERPを導入していて、そんなのシステムからボタン一つクリックするだけで表示できるし、エクセルやPDFファイルで出力することも出来るので、わざわざそんな面倒くさいことをする必要なんてないよ!」という方もいると思います。確かにそれはその通りだと思います。システムから出力される売上のレポートなどはデザイン的にも美しかったり、プロフェッショナル感もあると思うので、上司や利害関係者に提出する場合にはそちらを使用したほうが良いと思います。
でも、こんなこともないでしょうか?特定の月の数字(上の例なら3月)はERPなどのシステムのレポートでわかる。でも、その数字が他の月と比べてどうかとか前日の数字がここ1週間の日々の数字と比べて低いか高いかなどの数字の動きもパッと確認したい。要は点としての数字だけでなく線としての数字も同時に確認したいということです。
私は経理で働いているのでそんなことをよく思いますし、グラフを作成すればと思う人もいるかもしれませんが、数字でざっくり確認するだけで十分なので上の画像のようにその月の数字と年の累計で予実対比、そして月ごとの数字の変動も右にシートをスクロールさせるだけでパッと確認できる。そんな感じで好んでOFFSET関数を使います。システムからも月ごとの数字を表示するレポートもあると思いますが、そのレポートでは逆に予算や前年同月の数字などが併記されないなど、ERPなど高価なシステムを会社で導入していたとしても何かと不便なことが多かったりします。100%ドンピシャで1つのレポートに自分が欲しい情報が全て収められているというのは現実の実務の世界ではなかなかありません。この情報はあるけどあの情報がない、それは別のレポートでは表示されるのでそれぞれのレポートからエクセルなどに吐き出して結合させないといけないといった感じです。そして、複数のレポートをエクセル上に吐き出して、そこで必要な情報を結合するというのは実務では非常によくあることだと思います。
2. OFFSET関数とは?OFFSET関数の仕組み
それでは、OFFSET関数の仕組み、構成を見ていきたいと思います。OFFSET関数の式は以下の通りです。
=OFFSET関数(基準セル、行、列、高さ、幅)
- 基準セル=基準となるセル(A1など)
- 行=基準セルからどれだけ行をずらすか(例:3=基準セルから3行ずらす)
- 列=基準セルからどれだけ列をずらすか(例:3=基準セルから3列ずらす)
- 高さ=参照範囲の列を上下に拡大
- 幅=参照範囲の行を左右に拡大

上の例ではセルC7に=OFFSET(Q7,0,$C$3)という式が入っています。そしてC3には3月を示す3という数字が入っています。意味はセルQ7(基準セル)から0行(=つまり行の移動はない)、右に3列移動したところにあるセル(T7)の数字を示せということです。T7には1,500という数字が入っているのでC7には1,500が表示されているわけです。セルC3の数字を2に変えればセルC7は2,000を表示し、1に変更すれば1,000を表示します。
なお、上の式では高さや幅は省略されています。何故なら参照するセルは1つのセルだけだからです。R列からT列の合計とかが必要なわけではないからです。
では、「年」のセクションの数式はどうなっているでしょうか?上述の通りSUM関数との組み合わせによって特定の月の数字だけでなく、年累計を求めることも可能になります。セルJ7は4,500という数字(R7:T7の合計=1,000+2,000+1,500)が示されていますが、式は以下の通りとなります。
=SUM(OFFSET(Q7,0,1,,$C$3)
意味はQ7から0行、1列ずらしたセル(=R7)から高さ(=列)は変更しないで幅(=行)を3列に増幅(R7:T7)に
- Q7から0行、1列ずらしたセル(=R7)
- R7から高さ(=列)は変更しないで幅(=行)を3列に増幅(R7:T7)
- R7:T7の数字を合計する(SUM)
という風になり、結果として4,500が表示される形になります。
OFFSET関数の数式のルールですが:行、列は省略できない→移動する必要がない場合は0を入力する→=OFFSET(Q7,0,$C$3)
- 行、列は省略できない→移動する必要がない場合は0を入力する→=OFFSET(Q7,0,$C$3)
- 高さや幅は省略できる=OFFSET(Q7,0,$C$3(,高さ及び幅省略))又はSUM(OFFSET(Q7,0,1,,$C$3)
という具合です。
最初に述べた通り、エクセルは常に進化し続けています。最近はエクセル単体で使用するというよりかは外部データ(ERPやその他のシステム、アプリケーション)からエクセルに吐き出されるデータをエクセル上で加工、編集して次につなげるという仕事の流れになることの方が多いように感じます。データのファイルもCSVからテキストファイル、HTMLなど様々でそこにパワークエリやパワーBIなどでエクセルにコピペせず直接外部ファイルからファイルを開くことなくデータを抽出するようなことも出来るようになってきており、もはやエクセルの枠を超えたところでもエクセルが関わってこれるようになってきている、そんな気がします。
エクセルはまだまだ進化すると思われますし、益々エクセルなしでは仕事が出来ない、だからこそエクセルと真剣に向き合う必要がある、そんな時代になってきているのではないでしょうか?これまでは「エクセルは経理の人とかが使うもので、俺たち現場の人間はエクセル出来なくて当たり前」という文句が通用していた職場もあると思いますが、AIなどが益々これまで人間がやっていた仕事に参入してくると、エクセルなど会社で使用されているシステムを使えないというのは致命的になるかもしれません。