Excelで最長文字列を一発抽出|XLOOKUP・FILTER・INDEX+MATCHの使い分け完全ガイド
100件のリストから最長の文字列を探すとき、まだ目視でスクロールしていませんか? LEN関数とLookup系関数を組み合わせれば、どんなに長いリストでも1つの数式で即座に抽出できます。
この記事では、実際に手を動かして確認できるサンプルデータを使いながら、用途別に4つのアプローチと2つの応用Tipsを紹介します。
サンプルデータの設定
以下のデータをExcelのA列・B列に入力してください。方法④の条件付き検索まで、このデータで一通り試せます。
| 行 | A列(商品名) | B列(カテゴリ) |
|---|---|---|
| 2 | Apple | フルーツ |
| 3 | Strawberry | フルーツ |
| 4 | Kiwi | フルーツ |
| 5 | Passion Fruit | フルーツ |
| 6 | Fig | ドライフルーツ |
| 7 | Pomegranate | フルーツ |
| 8 | Date | ドライフルーツ |
目標は、A列の中から最も文字数が多い "Pomegranate"(11文字) を数式で抽出することです。
基本の考え方:MAX+LENで最大文字数を取得
どのアプローチでも共通する第一歩が、各セルの文字数を調べて最大値を求めるステップです。
=MAX(LEN(A2:A8))
この数式は 11 を返します。Excel 365 / 2021以降はそのまま確定でOK。旧バージョンでは Ctrl+Shift+Enter で配列数式として入力してください。
この「最大文字数 = 11」をキーにして、対応する文字列を検索するのが各手法の核心です。
アプローチ①:XLOOKUP|最もシンプルな1行解決
=XLOOKUP(MAX(LEN(A2:A8)), LEN(A2:A8), A2:A8)
結果: Pomegranate
解説
LEN(A2:A8)で各要素の文字数配列{5,10,4,13,3,11,4}を生成MAX(...)で最大値11を取得XLOOKUPが文字数配列から11と一致する位置を探し、対応する文字列を返す
向いている場面: 「とにかくシンプルに1件取得したい」という日常的な用途に最適。
⚠️ エラーハンドリング: 対象範囲が空の場合、
LENがすべて0を返すためMAXは0になり、XLOOKUPは#N/Aエラーを返します。空になる可能性がある場合はIFERRORでラップしましょう。excel =IFERROR(XLOOKUP(MAX(LEN(A2:A8)), LEN(A2:A8), A2:A8), "データなし")
アプローチ②:INDEX+MATCH|古いExcelでも動く互換性重視の書き方
=INDEX(A2:A8, MATCH(MAX(LEN(A2:A8)), LEN(A2:A8), 0))
結果: Pomegranate
解説
MATCH(MAX(LEN(A2:A8)), LEN(A2:A8), 0)で最大文字数が何行目にあるかを取得(→6)INDEX(A2:A8, 6)でその位置の値を返す
向いている場面: チームにExcel 2016以前のユーザーがいる環境。XLOOKUPはExcel 365/2021以降でしか使えないため、共有ファイルでは本アプローチが安全です。
⚠️ Excel 2019以前では
Ctrl+Shift+Enterによる配列数式での確定が必要です。数式バーに{=INDEX(...)}と波括弧が表示されれば正しく入力できています。
アプローチ③:FILTER|同率1位をまとめて全件取得
XLOOKUPやINDEX+MATCHは最初の1件しか返しません。同じ文字数の文字列が複数ある場合、漏れなく全件取得するには FILTER が最適です。
=FILTER(A2:A8, LEN(A2:A8)=MAX(LEN(A2:A8)))
結果: Pomegranate(該当が1件の場合)、同率1位が複数あればすべてスピル表示
解説
LEN(A2:A8)=MAX(LEN(A2:A8))がTRUEになる行だけを抽出- 該当するすべての文字列が縦方向にスピル展開して表示される
向いている場面: 「重複があっても確実に全件拾いたい」コンペや採点データの集計など。
⚠️ エラーハンドリング: 条件に一致する行が存在しない場合(範囲が空など)は
#CALC!エラーが返ります。第3引数に空文字を設定しておくと安全です。excel =FILTER(A2:A8, LEN(A2:A8)=MAX(LEN(A2:A8)), "該当なし")
アプローチ④:XLOOKUP+IF|カテゴリなどの条件で絞り込む
B列のカテゴリを使って「フルーツの中で最長の商品名」を取得するケースです。
=XLOOKUP( MAX(IF(B2:B8="フルーツ", LEN(A2:A8))), LEN(A2:A8), A2:A8 )
結果: Pomegranate(フルーツカテゴリの中で11文字が最長)
解説
IF(B2:B8="フルーツ", LEN(A2:A8))で「フルーツ」以外の行を除外した文字数配列を生成MAX(...)でその中の最大値を取得XLOOKUPで対応する文字列を返す
⚠️ Excel 365では通常確定でOKですが、旧バージョンでは
Ctrl+Shift+Enterが必要です。
応用Tips
Tips①:最短文字列を取得する
MAX を MIN に変えるだけです。
=XLOOKUP(MIN(LEN(A2:A8)), LEN(A2:A8), A2:A8)
結果: Fig(3文字)
Tips②:最長文字列とその文字数をセットで表示する
=XLOOKUP(MAX(LEN(A2:A8)), LEN(A2:A8), A2:A8) & "(" & MAX(LEN(A2:A8)) & "文字)"
結果: Pomegranate(11文字)
レポートや資料にそのまま貼れるため、出力整形の手間が省けます。
各アプローチの比較まとめ
| アプローチ | 複数件対応 | 互換性 | 難易度 | 向いている用途 |
|---|---|---|---|---|
| XLOOKUP | △ 1件のみ | Excel 365/2021以降 | 初心者向け | 日常的なシンプル抽出 |
| INDEX+MATCH | △ 1件のみ | Excel 2010以降 | 中級者向け | 旧バージョン共有ファイル |
| FILTER | ◎ 全件取得 | Excel 365/2021以降 | 中級者向け | 同率1位が発生しうるデータ |
| XLOOKUP+IF | △ 1件のみ | Excel 365推奨 | 上級者向け | カテゴリ・条件付き絞り込み |
まとめ
Excelで最長文字列を抽出する基本パターンは、MAX(LEN(...))で最大文字数を求め、Lookup系関数で文字列を返すという2ステップです。
- シンプルに1件取得したい →
XLOOKUP - 古いExcelとの互換性が必要 →
INDEX+MATCH - 同率1位もまとめて拾いたい →
FILTER - 条件で絞り込んでから探したい →
XLOOKUP+IF
どのアプローチも、今回のサンプルデータをそのまま使って動作確認できます。まずは方法①から試してみて、自分のデータに合うものを選んでみてください。
次回は「部分一致で最も近い値を検索するテクニック」を解説予定です。お楽しみに。