doodle-on-web

自分で調べたことや、仕事の中で質問されたことなどをまとめています。

Excelで最初の数値だけ取り出す方法【空白・文字列が混在しても大丈夫】

スポンサーリンク


「最初の数値」を取り出そうとして、うまくいかなかった経験はありませんか?

月次売上レポートを集計しているとき、こんなことはないでしょうか。

担当者ごとに入力されたデータが1列に並んでいるはずなのに、空白セルがあったり、「未入力」「確認中」といった文字列が混ざっていたりする。そこから「最初に記録された数値だけ」を取り出そうとVLOOKUPやFINDを試してみたけれど、うまく動かない——。

実はこのケース、通常の検索関数では対応しにくいのです。VLOOKUPは「値で検索」するので、「数値かどうか」という条件では動けません。FINDは文字列専用です。正しいアプローチを知らないと、意外なほど時間を取られます。

この記事では、空白・文字列・エラー値が混在するリアルなデータから「範囲内の最初の数値」を確実に取り出す方法を、Excelのバージョン別に解説します。


今回使うサンプルデータ

月次売上レポートの「B列:1月分の売上」に、以下のようなデータが入っているとします。

B列 内容
B1 (空白):未入力
B2 確認中:文字列
B3 (空白):未入力
B4 42000:数値 ← これを取り出したい
B5 98000:数値
B6 #N/A:エラー値

「最初に記録された売上数値(42000)」を自動で取り出す、というゴールで解説を進めます。


方法①:XLOOKUP + ISNUMBER(Excel 365 / 2021 推奨)

数式

=XLOOKUP(TRUE, ISNUMBER(B1:B6), B1:B6, "データなし")

仕組みの解説

パーツ 役割
ISNUMBER(B1:B6) 各セルが数値なら TRUE、そうでなければ FALSE の配列を生成
XLOOKUP(TRUE, ..., B1:B6) 先頭から走査し、最初に TRUE となる位置の値を返す
"データなし" 数値が1つもない場合のフォールバック表示

XLOOKUPはデフォルトで「先頭から順に完全一致検索」を行うため、追加の引数なしで「最初に TRUE になる位置=最初の数値」を正確に取得できます。

エラー値が含まれる場合の注意

ISNUMBER はエラー値(#N/A#DIV/0! など)に対して FALSE を返します。そのためエラー値は自動的にスキップされ、余分な対処は不要です。上記のサンプルデータでも問題なく 42000 が返ります。

おすすめ度:◎ シンプルで可読性が高く、保守もしやすい。まずこちらを試してください。


方法②:INDEX + MATCH + ISNUMBER(Excel 2019 / 2016 対応)

Excel 365や2021が使えない環境では、こちらの組み合わせが定番です。

数式

=IFERROR(INDEX(B1:B6, MATCH(TRUE, ISNUMBER(B1:B6), 0)), "データなし")

⚠️ Excel 2019・2016では Ctrl + Shift + Enter で配列数式として入力してください。数式バーに {=IFERROR(...)} のように波括弧が表示されれば正しく入力されています。Excel 365では通常のEnterで動作します。

仕組みの解説

パーツ 役割
ISNUMBER(B1:B6) TRUE/FALSE の配列を生成
MATCH(TRUE, ..., 0) 最初に TRUE となる位置(行番号)を返す
INDEX(B1:B6, ...) その行番号の値を取り出す
IFERROR(..., "データなし") 数値が見つからない場合のエラー回避

MATCH の第3引数を 0(完全一致)にするのが重要です。1-1 にすると意図しない動作になります。

エラー値が含まれる場合の注意

方法①と同様、ISNUMBER がエラー値を FALSE として処理するため、エラーセルは自動的にスキップされます。外側の IFERROR は「数値が1つも存在しないとき」のための保険です。

おすすめ度:○ 旧バージョンでも確実に動作する。IFERROR を忘れずに。


方法の比較まとめ

方法 対応バージョン 配列入力 エラー値への対応 可読性
XLOOKUP + ISNUMBER 365 / 2021以降 不要 自動でスキップ
INDEX + MATCH + ISNUMBER 2016以降 旧Verは必要 自動でスキップ

AGGREGATEについて: ネット記事によっては「AGGREGATE関数で最初の数値を取得できる」と紹介されているケースがありますが、AGGREGATEは「最小値」や「k番目に小さい値」を返す関数です。「最初の数値(位置が先頭のもの)」とは用途が異なるため、この記事のテーマには適しません。混同しないよう注意してください。


実践的な応用:エラー回避と横方向への展開

応用①:行方向(横並び)のデータにも使える

月ごとのデータが横に並んでいる場合も、範囲を変えるだけで対応できます。

=XLOOKUP(TRUE, ISNUMBER(B2:M2), B2:M2, "データなし")

B2からM2まで(1月〜12月)の行データから、最初に入力された月の数値を取得します。

応用②:特定の列・行範囲に絞って検索

=XLOOKUP(TRUE, ISNUMBER(C5:C100), C5:C100, "データなし")

ヘッダー行を除いたデータ範囲のみを対象にしたい場合など、範囲を明示的に指定することで誤取得を防げます。


まとめ

空白・文字列・エラー値が混在するExcelデータから「最初の数値」を取り出すには、ISNUMBERで数値かどうかを判定し、その結果を検索関数で利用するという考え方が核心です。

  • Excel 365 / 2021 を使っているなら → XLOOKUP + ISNUMBER(第4引数でエラー対策も忘れずに)
  • Excel 2019 / 2016 を使っているなら → IFERROR + INDEX + MATCH + ISNUMBER(配列入力を忘れずに)

どちらの方法も、エラー値は ISNUMBER が自動的に無視してくれるため、思ったよりシンプルに書けます。まずは今日のサンプルデータをそのまま使って、手元のExcelで動作確認してみてください。実際に動かすのが、最速の習得方法です。


このブログでは、ExcelのLookup系関数を中心に実践的なテクニックを定期的に紹介しています。他の記事もあわせてご覧ください。