「空白を飛ばして、最初の値だけ拾いたい」そのモヤモヤを解消します
こんな経験はありませんか?
月次の売上管理表を開いたら、1月・2月はまだ未入力で空白のまま。「最初に数字が入っている月の売上を、別のセルに自動で表示したい」――でも、どの関数を使えばいいか分からず、手動でコピペしている…。
この記事を読めば、空白を自動でスキップして最初の入力済みセルの値を取得する数式が、コピペ一発で使えるようになります。Excel 365ユーザー向けのシンプルな方法から、旧バージョン対応の方法まで、順を追って丁寧に解説します。
サンプルデータの確認
以下のようなデータを前提に進めます。
| 行 | A列(月) | B列(売上) |
|---|---|---|
| 2 | 1月 | (空白) |
| 3 | 2月 | (空白) |
| 4 | 3月 | 150,000 |
| 5 | 4月 | 200,000 |
| 6 | 5月 | 180,000 |
B列の上2行は空白で、最初に値が入っているB4(150,000)を自動で取得したいというシナリオです。
方法①:XLOOKUP を使う(Excel 365 / 2021以降)
数式
=XLOOKUP(FALSE, ISBLANK(B2:B6), B2:B6)
実行結果:150,000
仕組みをシンプルに理解する
| 引数 | 内容 |
|---|---|
| 検索値 | FALSE |
| 検索範囲 | ISBLANK(B2:B6) → 空白なら TRUE、値ありなら FALSE の配列 |
| 戻り範囲 | B2:B6 |
ISBLANK(B2:B6) は {TRUE; TRUE; FALSE; FALSE; FALSE} を返します。XLOOKUPはこの配列の先頭から順に FALSE(=空白でない)を探し、最初に見つかった位置に対応するB列の値を返します。追加引数なしでそのまま使えるのが最大のメリットです。
意味が伝わりやすい NOT 版
チームで共有するファイルには、こちらの方が直感的に読めます。
=XLOOKUP(TRUE, NOT(ISBLANK(B2:B6)), B2:B6)
NOT(ISBLANK(...)) で「空白でない=TRUE」の配列を作り、最初の TRUE を探す書き方です。動作は同じです。
⚠️ エラー対処:検索範囲がすべて空白の場合
すべてのセルが空白だと #N/A エラーが発生します。IFERROR でラップしておくのが安心です。
=IFERROR(XLOOKUP(FALSE, ISBLANK(B2:B6), B2:B6), "データなし")
方法②:INDEX+MATCH を使う(全バージョン対応)
XLOOKUPが使えない環境(Excel 2019以前)では、INDEX と MATCH の組み合わせが定番の代替手段です。
数式
=INDEX(B2:B6, MATCH(FALSE, ISBLANK(B2:B6), 0))
実行結果:150,000
⚠️ Excel 2019以前は
Ctrl + Shift + Enterで配列数式として入力してください。 Excel 365・2021以降は通常のEnterでOKです。
仕組みの解説
ISBLANK(B2:B6)→{TRUE; TRUE; FALSE; FALSE; FALSE}MATCH(FALSE, ..., 0)→ 最初にFALSEが現れる位置 3 を返すINDEX(B2:B6, 3)→ B列の3番目(B4)= 150,000 を返す
MATCH の第3引数に 0 を指定すると完全一致検索になります。ここを省略または 1 にすると意図しない結果になるので必ず 0 を入れてください。
⚠️ エラー対処:検索範囲がすべて空白の場合
こちらも同様に IFERROR で対処できます。
=IFERROR(INDEX(B2:B6, MATCH(FALSE, ISBLANK(B2:B6), 0)), "データなし")
応用:複数列にまたがって最初の入力済みセルを探す
1列での使い方が分かったら、次は複数列への応用も試してみましょう。
「A列・B列・C列のどれかに値があるが、左から最初の入力済みセルを取りたい」という場合は、範囲を横方向に指定するだけでOKです。
=XLOOKUP(FALSE, ISBLANK(A2:C2), A2:C2)
A2:C2 のように1行分の範囲を指定すると、XLOOKUPが左から順にスキャンして空白でない最初の値を返してくれます。縦・横どちらにも対応できるのがXLOOKUPの強みです。
補足:空文字列("")が入ったセルを除外したい場合
見た目は空白なのに値が拾われてしまうというケースがあります。これは "" (空文字列)が入力されているセルが原因です。
ISBLANK は本当に何も入っていないセルのみを TRUE と判定します。"" が入っているセルは FALSE を返すため、「空白でない」と見なされて取得対象になってしまいます。
空文字列も除外したい場合は、以下の数式を使います。
=XLOOKUP(TRUE, (B2:B6<>""), B2:B6)
B2:B6<>"" で「空文字列でない=TRUE」の配列を作り、最初の TRUE を探します。シンプルかつほとんどのケースに対応できます。
まとめ:どの数式を使えばいい?
| 方法 | 数式 | 対応バージョン |
|---|---|---|
| XLOOKUP(FALSE版) | =XLOOKUP(FALSE, ISBLANK(範囲), 範囲) |
365 / 2021以降 |
| XLOOKUP(NOT版) | =XLOOKUP(TRUE, NOT(ISBLANK(範囲)), 範囲) |
365 / 2021以降 |
| INDEX+MATCH | =INDEX(範囲, MATCH(FALSE, ISBLANK(範囲), 0)) |
全バージョン対応 |
迷ったらこの基準で選んでください:
- Excel 365 / 2021以降 → XLOOKUP版(シンプルで読みやすい)
- Excel 2019以前 → INDEX+MATCH版(配列数式で入力)
- チーム共有ファイル → NOT版(意味が直感的に伝わる)
「最初の入力済みセルを取得する」というシンプルな処理でも、数式の仕組みを理解しておくとさまざまな場面に応用できます。まずは自分のデータにコピペして動かしてみてください。
次回の記事では「最後の入力済みセルを取得する」方法を解説予定です。こちらもぜひご覧ください。