見出し画像

壊れないExcel(INDIRECT編)第3回:XMATCH+INDEXで“可変列”を安全実装

こんにちは、はんちゃんです。

前回、壊れないExcelシリーズの第2回をお伝えしました。
ご興味にある方は、是非第2回もご覧ください。

そして今回は、第3回 XMATCH+INDEXで“可変列”を安全実装をお届けします。

それでは、スタートです。



💡はじめに:OFFSETでは守れない「可変列」

「行は動かせるのに、列は動かせないんです…」
月ごとの売上表を扱う現場で、こんな声をよく聞きます。
例えば「1月」「2月」「3月」と列が並び、次の月になるたびに列を追加して参照式を修正する――
気づけば毎月“式の修正業務”が定例化してしまう。

もちろん、OFFSETを使えば動的に参照できるのですが、
OFFSETは「非揮発関数」と呼ばれ、データが増えるたびに再計算を起こします。


小規模な表なら問題ないものの、数千行を超えるデータではExcelが重くなる原因になりやすいのです。

では、壊れず軽く動作する「可変列の仕組み」は作れないのか?
実は――あります。
そのカギを握るのが、XMATCH関数とINDEX関数の合わせ技です。


🧭 INDEX+XMATCH=「動く列番地」

OFFSETが「位置からセルを探す」のに対し、
INDEXは「既知の範囲から位置を指定して取り出す」関数です。

そしてXMATCHは「見出し名から位置を返す」関数。
この2つを組み合わせると、“名前”で列を動かすことが可能になります。


▼ 例題:月別売上表

商品名1月2月3月A商品120130150B商品200210250

「見出しセル(B1~D1)に月名が並んでいる」この構造、よく見ますよね。

ここで、ユーザーがセル F1 に「3月」と入力したとします。
「F1で指定した月の売上を取得する」という式を作ってみましょう。


🧮 式例:XMATCHで列番号を取得

まずは列番号を取得します。

=XMATCH(F1, B1:D1)

→ 「3月」は3番目の列にあるので「3」が返ります。

このままでは数字なので、次にINDEX関数と連携します。


🧩 INDEXで可変列参照を完成

商品名がA2:A3、売上データがB2:D3の場合、
「A商品(1行目)の“F1で指定した月”の売上」を取得する式はこうなります👇

=INDEX(B2:D3, 1, XMATCH(F1, B1:D1))

→ F1が「3月」なら結果は 150
F1を「2月」に変えると、自動的に 130 に切り替わります。

OFFSETのように列の範囲をズラすこともなく、
数式が壊れることもありません。


⚙️ 仕組みの理解:参照を「名前」で追いかける

ここで大事なのは、「列番号をハードコーディングしない」という発想です。


OFFSETは「B列から右に2つ分」という“距離指定”ですが、
INDEX+XMATCHは「“2月”という見出しが何列目か」で探します。

つまり、列が挿入されても壊れない。
月順が変わっても、“名前”を頼りに正しい位置を探すのです。


🪶 軽さの違い

OFFSETは再計算が多く、行列の挿入・削除で式が再評価されやすい。
一方、INDEX+XMATCHは非揮発関数ではないため、
変更時の再計算が最小限に抑えられます。

試しに数千件の売上表を扱うと、OFFSET式のほうが約2〜3倍遅くなることもあります。
つまりこの方法は、「壊れない」だけでなく「速い」のです。


💻 応用:月選択でダッシュボードを切り替える

このINDEX+XMATCHを使えば、
「月ごとのグラフ」や「部門別ランキング」も、ワンクリックで切り替え可能になります。

例:
セルF1に「5月」、グラフ範囲に

=INDEX(tbl売上,,XMATCH(F1,tbl売上[#Headers]))

と指定すると、テーブルのヘッダー名から自動的に該当列を取得。
グラフがF1の月に合わせて動的に更新されます✨

この“グラフと数式がリンクするダッシュボード”は、
VBAを使わずに作れるのでメンテナンスも簡単。


📗 POINTまとめ

✅ OFFSETは便利だが壊れやすく、重くなりやすい
✅ INDEX+XMATCHで「列方向の動的参照」が安全に実現できる
✅ 「位置」ではなく「名前」で列を追いかける発想に切り替える
✅ 構造化参照と組み合わせると、テーブル単位でさらに強固に


🕊 次回予告

次回はついに「構造化参照」が登場します。
A1参照の“座標地獄”を抜け出し、
「売上表[金額]」のように“読める数式”へ進化する方法を徹底解説します。

👉 第4回:「テーブル構造参照で“壊れない数式”へ」

いいなと思ったら応援しよう!

はんちゃんのITカフェnote よろしければ応援お願い致します! いただいたチップはクリエイターとしての活動費に使わせていただきます!

この記事が参加している募集