Excelで行から最初の文字列を取り出す3つの方法【XLOOKUP・INDEX+MATCH対応】
「数値と文字列が混在した行データから、最初に登場する文字列だけを抜き出したい……」
そんな経験はありませんか? 手作業でひとつひとつ確認するのは非効率ですし、データ量が増えれば増えるほど時間を取られます。実は、数式3行以内でこの問題はスッキリ解決できます。
この記事では XLOOKUP・INDEX+MATCH・ISTEXT を使った方法を、Excelのバージョン別に整理して解説します。自分の環境に合った方法をそのままコピーして使ってください。
こんな場面で役に立ちます
まず、どんなデータを想定しているか確認しておきましょう。
| B列 | C列 | D列 | E列 |
|---|---|---|---|
| 100 | 200 | りんご | 300 |
| 東京 | 400 | 500 | 大阪 |
| 10 | 20 | 30 | 40 |
このように数値・文字列・空白が混在する行から、最初に登場する文字列だけを取り出したいケースです。
具体的な活用シーン:
- 商品コードと商品名が同じ行に混在している一覧から商品名を抽出したい
- アンケートで「数値回答+自由記述」が混在している行から最初のコメントを拾いたい
たとえばアンケートデータで以下のような行があるとします。
| 満足度(数値) | 理由(自由記述) | 再利用意向(数値) |
|---|---|---|
| 4 | 使いやすかった | 5 |
この行に対して後述の数式を使えば、「使いやすかった」 を一発で取り出せます。
基本の考え方:ISTEXTで文字列を見分ける
どの方法にも共通する核心は ISTEXT 関数です。
=ISTEXT(値)
セルの値がテキスト(文字列)なら TRUE、そうでなければ FALSE を返します。
=ISTEXT("りんご") → TRUE
=ISTEXT(100) → FALSE
=ISTEXT("") → FALSE ← 空文字もFALSEになる点に注意
ISTEXT(B2:E2) のように範囲を渡すと、各セルの判定結果が配列で返ってきます。
{FALSE, FALSE, TRUE, FALSE}
あとはこの配列の最初のTRUEに対応する元の値を取り出すだけです。それを実現するのが以下の2つの方法です。
方法①:XLOOKUPを使う(Excel 365 / Google スプレッドシート)
最もシンプルで読みやすい方法です。 Excel 365またはGoogle スプレッドシートの環境ならこちらを使ってください。
数式
=XLOOKUP(TRUE, ISTEXT(B2:E2), B2:E2, "なし")
引数の意味
| 引数 | 設定値 | 意味 |
|---|---|---|
| 検索値 | TRUE |
テキスト判定がTRUEのセルを探す |
| 検索範囲 | ISTEXT(B2:E2) |
各セルをTRUE/FALSEに変換した配列 |
| 戻り範囲 | B2:E2 |
実際の値を返す元データ |
| 見つからない場合 | "なし" |
文字列がなかったときの表示 |
XLOOKUPは配列をそのまま扱えるため、Ctrl+Shift+Enterの配列入力は不要です。通常どおりEnterで確定してください。
検索は左から右の順番で行われるため、「最初の」テキスト値が自動的に返ってきます。
Google スプレッドシートでの注意点
Google スプレッドシートでもXLOOKUPは同じ書き方で動作します。ただし、ARRAYFORMULAと組み合わせて複数行に一括適用する場合は、以下のように書きます。
=ARRAYFORMULA(XLOOKUP(TRUE, ISTEXT(B2:E10), B2:E10, "なし"))
※スプレッドシートのXLOOKUPはバージョンによって挙動が異なる場合があるため、動作確認を推奨します。
方法②:INDEX+MATCHを使う(Excel 2019以前・互換性重視)
XLOOKUPが使えない環境では、INDEX+MATCH+ISTEXTの組み合わせが最も確実です。Excel 2007以降であれば動作します。
数式(配列数式)
{=INDEX(B2:E2, MATCH(TRUE, ISTEXT(B2:E2), 0))}
入力方法: 数式を入力後、Ctrl+Shift+Enter で確定してください。数式バーに { } が自動的に付きます。
数式の仕組み
ISTEXT(B2:E2)
→ {FALSE, FALSE, TRUE, FALSE}
MATCH(TRUE, {FALSE, FALSE, TRUE, FALSE}, 0)
→ 3(最初にTRUEが現れる位置)
INDEX(B2:E2, 3)
→ "りんご"(3番目の値)
3ステップで「最初のテキスト値の位置を特定し、その値を返す」という流れです。
文字列が見つからない場合のエラー処理
文字列が1つもない行では #N/A エラーが返ります。IFERROR で囲んで対処しましょう。
{=IFERROR(INDEX(B2:E2, MATCH(TRUE, ISTEXT(B2:E2), 0)), "なし")}
HLOOKUPについて
HLOOKUPを使ったアプローチも技術的には可能ですが、ISTEXTの変換配列から元の値を直接取り出すことができないという制約があります。結局INDEX+MATCHと組み合わせる必要があり、読みやすさの面でも優位性がありません。
「横方向の検索にはHLOOKUP」というイメージがありますが、このケースではINDEX+MATCHの方がシンプルで確実です。
複数行への一括適用
F列に数式を入力してオートフィルすれば、複数行にまとめて適用できます。
| 行 | B | C | D | E | F(取得結果) |
|---|---|---|---|---|---|
| 2 | 100 | 200 | りんご | 300 | りんご |
| 3 | 東京 | 400 | 500 | 大阪 | 東京 |
| 4 | 10 | 20 | 30 | 40 | なし |
XLOOKUPの場合: F2に入力してF3・F4へコピーするだけです。
=XLOOKUP(TRUE, ISTEXT(B2:E2), B2:E2, "なし")
INDEX+MATCHの場合: 配列数式のままオートフィルできます。
{=IFERROR(INDEX(B2:E2, MATCH(TRUE, ISTEXT(B2:E2), 0)), "なし")}
応用:同じパターンで「最初の数値」も取れる
ISTEXT を別の判定関数に差し替えるだけで、同じ構造がそのまま使えます。
| 取得したいもの | 変更箇所 |
|---|---|
| 最初の数値 | ISTEXT → ISNUMBER |
| 最初の空白でないセル | ISTEXT(...) → B2:E2<>"" |
| 最初の空白セル | ISTEXT(...) → B2:E2="" |
例:行の中から最初の数値を取る(XLOOKUP版)
=XLOOKUP(TRUE, ISNUMBER(B2:E2), B2:E2, "なし")
一度パターンを覚えてしまえば、さまざまな条件に柔軟に応用できます。
まとめ:環境別の使い分け
| 使用環境 | おすすめ方法 | 配列入力 |
|---|---|---|
| Excel 365 / Google スプレッドシート | XLOOKUP + ISTEXT | 不要 |
| Excel 2019以前 | INDEX + MATCH + ISTEXT | Ctrl+Shift+Enter |
迷ったらまずXLOOKUP、使えない環境ならINDEX+MATCH、という判断で問題ありません。
ISTEXT で判定配列を作り、検索関数でその最初のTRUEを捕まえる——このシンプルな考え方を軸に、ぜひ自分のデータに合わせてカスタマイズしてみてください。
📌 関連記事もあわせてどうぞ - [行の中から最初の数値を取得する方法] - [XLOOKUP・VLOOKUPで複数条件を指定する方法]