第2回:ExcelのOFFSETも仲間!? INDEXで作る“軽い動的範囲”INDIRECT地獄を抜けて、壊れないExcelの第一歩へ
月末、集計シートの前でため息をつく──。
「また範囲がズレてる…」「先月の数式、どこ直したっけ?」
毎月のように数式を修正し、いつの間にかExcelの奴隷になっていた。
そんなあなたの前に現れたのが、OFFSET関数。
「行数を数えれば、自動で範囲が広がりますよ」と、
まるで救世主のように現れたこの関数は、
最初のうちは確かに便利に見えた。
しかし──。
データが増えるたび、再計算に時間がかかり、
開くたびにファンが唸りを上げる“重いシート”に変貌していく。
そこで登場するのが、静かなる新星。
その名も、INDEX関数。
彼は派手さはないが、堅実で、壊れない。
今日のテーマは「OFFSETの光と影、そしてINDEXという希望」だ。
💡 毎月ズレるSUM範囲、直してませんか?
「今月分のデータを追加したら、合計が合わなくなった…」
「B100までだったのに、今はB120までデータがある」
「また範囲を直さないと💦」
Excelを使っていると、こんな「範囲ズレ問題」に出会うこと、ありますよね。
つい INDIRECT関数 や OFFSET関数 で“自動化”したくなるけれど、
実はそれが “重くて壊れやすいExcel” の第一歩なんです。
⚙️ OFFSETの便利さと落とし穴
OFFSETはとても柔軟です。
「基準セルから○行下、○列右のセルを指定」できるため、
「どこからどこまで」という範囲を動的に作れます。
例:
=SUM(OFFSET(B2,0,0,COUNTA(B:B)-1,1))
この式なら、B列のデータ数に合わせて範囲を自動調整できます。
ただし…… OFFSETは揮発性関数(※)のため、
データ量が多いと シート全体が再計算 されてしまうという弱点があります。
※ 揮発性関数とは:
セルを編集するたびに再計算される関数。
INDIRECT・OFFSET・TODAYなどが代表的です。
つまり、使い方次第で「どんどん重くなる」原因にもなってしまうのです。
🧭 INDEXで作る“軽い動的範囲”
では、どうすればよいのでしょうか?
ここで登場するのが、INDEX関数 です💡
INDEXは、指定した範囲の中から「○行目の値」を返す関数。
でも、SUMなどと組み合わせると、
**「範囲の終点を自動的に判断する」**ことができるのです。
例:
=SUM(B2:INDEX(B:B,COUNTA(B:B)))
この数式の動きはこうなります👇
処理内容結果COUNTA(B:B)B列のデータ数をカウントINDEX(B:B, COUNTA(B:B))最終行のセル位置を取得SUM(B2:〜)B2から最終行までを合計
つまり「データが何行あっても、最後まで自動で拾う」仕組みです。
しかも 非揮発性 なので、OFFSETよりも圧倒的に軽く動作します✨
📗 図解ポイント:
A列 B列 C列
日付 数量 金額
10/01 5 500
10/02 3 300
:
10/31 4 400
上記のような表で、B列を集計する場合:
=SUM(B2:INDEX(B:B,COUNTA(B:B)))
と書いておけば、行を追加しても自動で範囲が広がります。
SUM(B2:B100) のように固定範囲を更新する必要はありません👌
🧩 壊れない数式への第一歩
INDEX関数を使うメリットはシンプルですが絶大です。
✅ データが増えても、数式を直す必要なし
✅ OFFSETより動作が軽く、再計算も少ない
✅ INDIRECTのようにセル番地を文字列で追う必要もない
つまり、INDEX関数で“構造的な安定感”を手に入れることができるのです。
これこそ、「壊れないExcel」への第一歩。
次回は、このINDEXをさらに進化させて、
XMATCH関数と組み合わせた“可変列”の安全実装を見ていきましょう💫
📘 まとめ:OFFSETからINDEXへ!
比較項目OFFSETINDEX柔軟性高い高い処理速度遅い(揮発性)速い(非揮発性)壊れやすさ高い低い可読性低い高い
OFFSETを卒業してINDEXへ──
それが、壊れないExcelへの近道です💚
📎 第1回はこちら
いいなと思ったら応援しよう!
よろしければ応援お願い致します! いただいたチップはクリエイターとしての活動費に使わせていただきます!