doodle-on-web

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

Excelで最長文字列を一発抽出|XLOOKUP・FILTER・INDEX+MATCHの使い分け完全ガイド

スポンサーリンク


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

解説

  1. LEN(A2:A8) で各要素の文字数配列 {5,10,4,13,3,11,4} を生成
  2. MAX(...) で最大値 11 を取得
  3. 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

解説

  1. MATCH(MAX(LEN(A2:A8)), LEN(A2:A8), 0) で最大文字数が何行目にあるかを取得(→ 6
  2. INDEX(A2:A8, 6) でその位置の値を返す

向いている場面: チームにExcel 2016以前のユーザーがいる環境。XLOOKUPはExcel 365/2021以降でしか使えないため、共有ファイルでは本アプローチが安全です。

⚠️ Excel 2019以前では Ctrl+Shift+Enter による配列数式での確定が必要です。数式バーに {=INDEX(...)} と波括弧が表示されれば正しく入力できています。


アプローチ③:FILTER|同率1位をまとめて全件取得

XLOOKUPINDEX+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①:最短文字列を取得する

MAXMIN に変えるだけです。

=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

どのアプローチも、今回のサンプルデータをそのまま使って動作確認できます。まずは方法①から試してみて、自分のデータに合うものを選んでみてください。


次回は「部分一致で最も近い値を検索するテクニック」を解説予定です。お楽しみに。