当サイトの記事にはプロモーションが含まれています。

XLOOKUPで複数データを取り出せない悩みを一発解決!FILTERとTEXTJOINの合わせ技で1セルに全件まとめる方法

パソコンパソコン・スマホ教室
スポンサーリンク

「受注IDで検索したら、最初の1件しか返ってこない……」そう思って頭を抱えた経験、ありませんか?実は私も最初にこれで詰まって、かなりの時間を無駄にしました。VLOOKUPもXLOOKUPも、検索してヒットした最初の1件しか返してくれないという、地味に困る制限があるんですよね。でも安心してください。FILTER関数とTEXTJOIN関数を組み合わせるという、知ってしまえばシンプルな解決策があります。しかも2026年現在、さらに便利な最新テクニックもあるので、今日の記事を読み終わったらきっと「こういう記事を探していた!」と感じてもらえるはずです。

ここがポイント!

  • XLOOKUPやVLOOKUPが複数件ヒットに対応できない理由と、その正しい代替手段の解説。
  • FILTER関数とTEXTJOIN関数を組み合わせて、条件に合う複数データを1つのセルに区切り文字で列挙する具体的な手順。
  • 2026年現在使えるGROUPBY関数など、さらに一歩進んだ最新テクニックの紹介。
スポンサーリンク
  1. そもそもXLOOKUPではなぜ複数データを取り出せないのか?
  2. FILTER関数で条件に一致するデータをすべて抽出する
    1. FILTER関数の基本的な使い方を理解しよう
    2. FILTER関数が使えないExcelバージョンのときの代替策
  3. TEXTJOIN関数で複数の結果を1つのセルにまとめる
    1. TEXTJOIN関数の仕組みをわかりやすく解説
    2. FILTERとTEXTJOINを組み合わせた完成形の数式
    3. 複数条件で絞り込みたいときの数式パターン
  4. さらに上を行く!2026年現在の最新テクニック3選
    1. ①SORT関数と組み合わせて結果を五十音順に並べる
    2. ②UNIQUE関数で重複を除外した一覧を作る
    3. ③GROUPBY関数で1行の数式だけでまとめ表を自動生成する
  5. VBAで自動化!複数データを1セルにまとめる作業を一瞬で終わらせるコード集
    1. VBAコード①指定したIDに一致する値を区切り文字でまとめて返す汎用関数
    2. VBAコード②シート全体を一括処理して新しいシートに結果を貼り付けるマクロ
    3. VBAコード③重複除去+ソート機能付きの高機能バージョン
  6. 現場で本当によく起きるトラブルとその解決策
    1. 「数式は合っているはずなのに#SPILL!エラーが出て困る」
    2. 「区切り文字でまとめたあと、逆にそれを分割して元に戻したい」
    3. 「TEXTJOINの結果が文字化けしたり、区切り文字が「?」になってしまう」
    4. 「FILTER関数で取り出した値をVLOOKUPのような使い方で別の表と突合したい」
  7. 組み合わせると生産性が爆上がりする関連テクニック
    1. ドロップダウンリストと組み合わせてインタラクティブな検索ツールを作る
    2. 条件付き書式と組み合わせて検索結果を色でハイライトする
    3. Power Queryと使い分けてデータ前処理をもっと楽にする
    4. 名前付き範囲でテーブル全体を管理してメンテを楽にする
  8. ぶっちゃけこうした方がいい!
  9. XLOOKUPやFILTER関数に関するよくある疑問を解決!
    1. FILTERで条件に一致するものが1件もなかったとき、エラーを出さないようにするには?
    2. FILTER関数の結果に#N/Aエラーが混ざっているとおかしな結果になるのはなぜ?
    3. この組み合わせ技はMac版Excelでも使えますか?
  10. 今すぐパソコンやスマホの悩みを解決したい!どうしたらいい?
  11. まとめ

そもそもXLOOKUPではなぜ複数データを取り出せないのか?

Excelのイメージ

Excelのイメージ

まず「なぜXLOOKUPではダメなの?」という疑問から整理しましょう。XLOOKUPは2019年以降に登場した非常に優秀な関数で、VLOOKUPよりはるかに柔軟に使えます。しかし、その設計思想はあくまで「1つの検索値に対して1つの結果を返す」というものです。

例えば、受注管理表で受注ID「R-1001」に紐づく製品が「製品A」「製品B」の2行あったとします。このとき、=XLOOKUP(“R-1001”,B列,E列) と入力すると、返ってくるのは上から最初に見つかった「製品A」だけです。「製品B」は完全に無視されてしまいます。これはVLOOKUPでも同様で、関数の仕様として「最初の一致のみ」という制限があるんです。

帳票形式(同じIDの明細が複数行に分かれている形式)のデータはビジネス現場でよく見かけます。見た目はスッキリしていても、データ分析の観点からは「1つのIDに複数の明細が紐づいている」という構造が問題になりやすいのです。ここさえ理解できれば、後の解決策がすんなり頭に入ります。

FILTER関数で条件に一致するデータをすべて抽出する

FILTER関数の基本的な使い方を理解しよう

FILTER関数(フィルター関数)は、指定した条件に一致するデータをまとめて取り出せる、いわば「自動的に絞り込みをかけてくれる関数」です。この関数はMicrosoft 365とExcel 2021以降で使えます(Excel 2019以前では使えないので注意してください)。

構文はシンプルです。=FILTER(配列, 含む, ) という形で書きます。「配列」には抽出したいデータの範囲、「含む」には絞り込み条件、「空の場合」は条件に一致するものがなかったときに表示したい値(省略可能)を指定します。

先ほどの受注管理表の例で言えば、製品列がE3:E19、受注ID列がB3:B19にあり、検索したいIDがセルJ2に入っているとします。すると数式はこうなります。

=FILTER(E3:E19, B3:B19=J2)

これを入力すると、J2に書いたIDに一致する製品がすべてリストアップされます。「製品A」と「製品B」の両方が縦方向に並んで表示される、という感じです。XLOOKUPでは1件しか取れなかったのに、FILTERなら一発で全件取れる。これが最初の「知らなかった!」ポイントです。

FILTER関数が使えないExcelバージョンのときの代替策

「うちの会社のExcelはまだ2016や2019なんだけど……」という方も多いと思います。そういうときはFILTER関数が使えないので、TEXTJOIN関数とIF関数を組み合わせた配列数式という方法があります。

=TEXTJOIN(“、”, TRUE, IF(B3:B19=J2, E3:E19, “”))

Excel 2019の場合はそのままEnterで動きますが、Excel 2016以前ではCtrl + Shift + Enterで入力する「配列数式」として確定する必要があります。入力後に数式バーに「{=TEXTJOIN…}」のように波括弧がつけば成功です。FILTER関数ほどスマートではありませんが、古いExcelでも同様の結果が得られるので覚えておくと助かります。

TEXTJOIN関数で複数の結果を1つのセルにまとめる

TEXTJOIN関数の仕組みをわかりやすく解説

FILTER関数で全件取り出せたのはいいのですが、結果が縦方向にズラーっと並んでしまいます。「これを1つのセルに、読点(「、」)区切りで表示したい」というのがよくあるニーズですよね。それを叶えてくれるのがTEXTJOIN関数(テキストジョイン関数)です。

TEXTJOINは「テキストを任意の区切り文字で連結する」関数です。構文は =TEXTJOIN(区切り文字, 空のセルは無視, 文字列1, , …) です。第2引数にTRUEを指定すると空白セルを無視してくれます(FALSEにすると空白部分にも区切り文字が入ります)。

FILTERとTEXTJOINを組み合わせた完成形の数式

FILTER関数の結果をそのままTEXTJOINの引数として渡せば、1行の数式でスッキリ解決します。

=TEXTJOIN(“、”, TRUE, FILTER(E3:E19, B3:B19=J2))

これだけで、J2の受注IDに一致する製品がすべて「製品A、製品B」のように1セルにまとめて表示されます。区切り文字は「、」でも「/」でも「・」でも好きなものに変えられます。コンマを使いたければ「,」に変えるだけ。数式の修正箇所は区切り文字の部分のみなので、応用も簡単です。

複数条件で絞り込みたいときの数式パターン

「受注IDだけでなく、さらに商品カテゴリも絞り込みたい」という応用的なケースもあります。FILTER関数の第2引数(含む)は、複数条件をアスタリスク(*)でつなぐことでAND条件、プラス(+)でつなぐことでOR条件にできます。

AND条件の例(受注IDが一致、かつカテゴリが一致)
=TEXTJOIN(“、”, TRUE, FILTER(E3:E19, (B3:B19=J2)*(C3:C19=K2)))

OR条件の例(受注IDが一致、またはカテゴリが一致)
=TEXTJOIN(“、”, TRUE, FILTER(E3:E19, (B3:B19=J2)+(C3:C19=K2)))

ただし、OR条件の場合は重複が出る可能性があるので、後述するUNIQUE関数と組み合わせると安心です。

さらに上を行く!2026年現在の最新テクニック3選

①SORT関数と組み合わせて結果を五十音順に並べる

FILTER関数で取り出した結果の順番は、元のデータの並び順通りです。もし結果をアルファベット順や五十音順に並べたいなら、FILTERの結果をSORT関数でラップします。

=TEXTJOIN(“、”, TRUE, SORT(FILTER(E3:E19, B3:B19=J2)))

SORT関数(ソート関数)は動的配列関数の一つで、指定した範囲を並べ替えた結果を返してくれます。これを入れるだけで「製品一覧が常にきれいな順番で表示される」という仕上がりになります。特に報告書に貼り付けるようなデータを作るとき、見た目が整うので重宝します。

②UNIQUE関数で重複を除外した一覧を作る

元データに同じ値が複数入っている場合、FILTERだけだと重複した値が列挙されてしまいます。そこで役立つのがUNIQUE関数(ユニーク関数)です。

=TEXTJOIN(“、”, TRUE, UNIQUE(FILTER(E3:E19, B3:B19=J2)))

これで重複を取り除いた上で1セルにまとめられます。「同じ製品が複数行にあるけど、一覧では1回だけ表示したい」という場面でよく使います。実務でのデータ活用では、このUNIQUEとFILTERの組み合わせを知っているかどうかで作業効率が大きく変わります。

③GROUPBY関数で1行の数式だけでまとめ表を自動生成する

これが2026年現在、最も注目すべき新機能です。GROUPBY関数は、Microsoft 365で利用できる最新の集計関数で、ピボットテーブルと同等のまとめ作業を1つの数式だけで実現できます。しかも、元データが変われば自動で結果も更新されます。

テキストのまとめ(各カテゴリに属する項目を列挙する)をしたい場合、こんな数式が使えます。

=GROUPBY(B3:B32, E3:E32, LAMBDA(x, ARRAYTOTEXT(UNIQUE(x))))

この数式は「B列でグループ化して、各グループのE列の値をユニークにまとめてテキスト化する」という意味です。ARRAYTOTEXT関数(アレイトゥテキスト関数)がGROUPBY内で使えるようになり、「カテゴリごとに含まれる全アイテムをカンマ区切りで1セルにまとめた表」を一発で作れるようになりました。以前はこれをやろうとすると非常に長い数式が必要でしたが、今はたった1行で済むのです。

VBAで自動化!複数データを1セルにまとめる作業を一瞬で終わらせるコード集

Excelのイメージ

Excelのイメージ

FILTER関数とTEXTJOIN関数の組み合わせは確かに便利なのですが、「関数が使えない古いExcelしかない」「もっと柔軟にカスタマイズしたい」「ボタン1つで一括処理したい」という現場の声もよく聞きます。そこで、VBA(Visual Basic for Applications)を使って同じことをやる方法を紹介します。VBAと聞くと怖く感じる方もいますが、コピペして使えるレベルで解説しますので安心してください。

VBAコード①指定したIDに一致する値を区切り文字でまとめて返す汎用関数

まず最初は、ワークシート関数として使えるカスタム関数(ユーザー定義関数)を作るコードです。FILTER関数が使えない環境でも、この関数をExcelに登録すればセルに直接 =JoinMatch() と書いて使えます。

Function JoinMatch(searchVal As Variant, searchRange As Range, _
                   returnRange As Range, Optional delimiter As String = "、") As String
    Dim i As Long
    Dim result As String
    Dim cell As Range
    Dim idx As Long
    
    idx = 1
    result = ""
    
    For i = 1 To searchRange.Rows.Count
        If searchRange.Cells(i, 1).Value = searchVal Then
            If result <> "" Then result = result & delimiter
            result = result & returnRange.Cells(i, 1).Value
        End If
    Next i
    
    If result = "" Then
        JoinMatch = "該当なし"
    Else
        JoinMatch = result
    End If
End Function

使い方 Alt+F11でVBEを開き、「挿入」→「標準モジュール」から上記コードを貼り付けて保存します。その後、ワークシートのセルで =JoinMatch(J2, B3:B19, E3:E19, “、”) のように呼び出せます。第4引数の区切り文字は省略すると「、」になります。このコードはExcel 2010以降であればどのバージョンでも動くというのが最大の強みで、古い環境の会社でも即戦力になります。

VBAコード②シート全体を一括処理して新しいシートに結果を貼り付けるマクロ

次は「毎月同じ作業を手動でやっているのが面倒……」という方向けの、一括処理マクロです。受注データシートを読み込んで、IDごとに製品を集約した結果を別シートに自動生成します。

Sub ConsolidateByID()
    Dim wsData As Worksheet
    Dim wsResult As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim j As Long
    Dim idDict As Object
    Dim idList As Object
    Dim currentID As String
    Dim currentVal As String
    Dim delimiter As String
    
    delimiter = "、"
    
    ' データシートを参照(シート名は実際のものに変更してください)
    Set wsData = ThisWorkbook.Sheets("受注データ")
    
    ' 結果シートを新規作成(既存なら削除して再作成)
    On Error Resume Next
    Application.DisplayAlerts = False
    ThisWorkbook.Sheets("集約結果").Delete
    Application.DisplayAlerts = True
    On Error GoTo 0
    
    Set wsResult = ThisWorkbook.Sheets.Add(After:=wsData)
    wsResult.Name = "集約結果"
    
    ' ヘッダーを書き込む
    wsResult.Cells(1, 1).Value = "受注ID"
    wsResult.Cells(1, 2).Value = "製品一覧"
    
    ' 辞書オブジェクトで集約処理
    Set idDict = CreateObject("Scripting.Dictionary")
    Set idList = CreateObject("Scripting.Dictionary")
    
    lastRow = wsData.Cells(wsData.Rows.Count, 2).End(xlUp).Row
    
    For i = 3 To lastRow
        currentID = wsData.Cells(i, 2).Value
        currentVal = wsData.Cells(i, 5).Value
        
        If currentID = "" Then GoTo NextRow
        
        If idDict.Exists(currentID) Then
            If currentVal <> "" Then
                idDict(currentID) = idDict(currentID) & delimiter & currentVal
            End If
        Else
            idDict(currentID) = currentVal
            idList(idList.Count) = currentID
        End If
NextRow:
    Next i
    
    ' 結果をシートに書き込む
    j = 2
    Dim key As Variant
    For Each key In idList.Items
        wsResult.Cells(j, 1).Value = key
        wsResult.Cells(j, 2).Value = idDict(key)
        j = j + 1
    Next key
    
    ' 列幅を自動調整
    wsResult.Columns("A:B").AutoFit
    
    MsgBox "集約完了!「集約結果」シートを確認してください。", vbInformation
End Sub

このマクロの特徴はScripting.Dictionaryオブジェクト(連想配列)を使っている点です。これを使うことで、ループの回数を最小限に抑えつつ高速に集約処理ができます。万行を超えるデータでも快適に動作します。使う際は、コード内の「受注データ」「B列(受注ID)」「E列(製品)」の部分を実際のシート名・列番号に変えてください。

VBAコード③重複除去+ソート機能付きの高機能バージョン

現場からよく聞くもう一つのニーズが「集約するときに重複を除いて、しかも五十音順に並べてほしい」というものです。関数だとSORT+UNIQUEを組み合わせれば解決しますが、VBAでも同じことができます。

Function JoinUniqueSorted(searchVal As Variant, searchRange As Range, _
                          returnRange As Range, Optional delimiter As String = "、") As String
    Dim i As Long
    Dim tempDict As Object
    Dim tempArr() As String
    Dim n As Long
    Dim tempSwap As String
    Dim swapped As Boolean
    
    Set tempDict = CreateObject("Scripting.Dictionary")
    n = 0
    
    ' 条件に一致する値を重複なしで収集
    For i = 1 To searchRange.Rows.Count
        If searchRange.Cells(i, 1).Value = searchVal Then
            Dim val As String
            val = CStr(returnRange.Cells(i, 1).Value)
            If val <> "" And Not tempDict.Exists(val) Then
                tempDict(val) = True
                n = n + 1
                ReDim Preserve tempArr(n - 1)
                tempArr(n - 1) = val
            End If
        End If
    Next i
    
    If n = 0 Then
        JoinUniqueSorted = "該当なし"
        Exit Function
    End If
    
    ' バブルソートで並べ替え
    Do
        swapped = False
        For i = 0 To n - 2
            If tempArr(i) > tempArr(i + 1) Then
                tempSwap = tempArr(i)
                tempArr(i) = tempArr(i + 1)
                tempArr(i + 1) = tempSwap
                swapped = True
            End If
        Next i
    Loop While swapped
    
    ' 区切り文字で連結
    JoinUniqueSorted = Join(tempArr, delimiter)
End Function

このコードは辞書で重複チェックをしながら収集し、その後バブルソートで並べ替えて連結しています。使い方は最初のJoinMatch関数と同じです。セルで =JoinUniqueSorted(J2, B3:B19, E3:E19) と書くだけです。

現場で本当によく起きるトラブルとその解決策

「数式は合っているはずなのに#SPILL!エラーが出て困る」

これ、本当によく相談される悩みです。FILTER関数を入力したセルの下や右に、すでに何かデータが入っていると「#SPILL!エラー(スピルエラー)」が出ます。FILTER関数は複数の結果を「スピル(溢れ出す)」形式で返す動的配列関数なので、結果を展開するためのスペースが必要なんです。

解決策は単純で、FILTER関数を入力するセルの下方向(縦に返す場合)や右方向(横に返す場合)を空けるだけです。ただ、「どこまで空ければいいかわからない」という方には、今回紹介したTEXTJOINと組み合わせる方法が最強の答えです。TEXTJOINの中に入れてしまえば、結果は常に1つのセルに収まる文字列として返ってくるので、スピルは起きません。これが、TEXTJOIN+FILTERの組み合わせが実務で重宝されるもう一つの理由です。

「区切り文字でまとめたあと、逆にそれを分割して元に戻したい」

「集約した結果を別の作業で使おうとしたら、今度は分割して別々のセルに入れ直す作業が必要になった……」という声も聞きます。Excelにはこの逆操作として「区切り位置」機能(テキストを列へ)があります。対象のセルを選んで、「データ」タブ→「区切り位置」→「コンマやタブなどの区切り文字によって~」を選んで区切り文字を指定すれば、1セルの文字列を複数セルに分割できます。

ただし、このやり方は元のセルのデータを上書きしてしまうので注意が必要です。VBAで処理する場合は Split関数 を使えばきれいに分割できます。例えば Split(“製品A、製品B、製品C”, “、”) と書くと、配列として「製品A」「製品B」「製品C」が得られます。

「TEXTJOINの結果が文字化けしたり、区切り文字が「?」になってしまう」

日本語の読点(「、」)を区切り文字に使ったとき、稀にファイルの保存形式や文字コードの問題で「?」や別の記号に化けてしまうケースがあります。特にCSVファイルとして保存・読み込みをする場合に起きやすいです。解決策は2つあります。ひとつは区切り文字を半角カンマ(,)やスラッシュ(/)など、ASCII文字の記号に変えること。もうひとつは、保存形式を「UTF-8のCSV」ではなく「Excelブック(.xlsx)」のまま扱うことです。日本語環境では後者の方が安全なことが多いです。

「FILTER関数で取り出した値をVLOOKUPのような使い方で別の表と突合したい」

「FILTERで取り出した複数結果を、さらに別テーブルのマスタと突き合わせたい」というのも現場あるある案件です。この場合は一度FILTERの結果をどこかのセルに展開してから(スピルさせてから)、そのスピル範囲に対してVLOOKUPやXLOOKUPをかけるのが一番わかりやすいです。スピルした範囲は「先頭セル番地#」という書き方で参照できます(例=VLOOKUP(A1, F2#, 2, FALSE) のように「F2#」と書くと、F2からスピルした範囲全体を参照できる)。この「#」記号はスピル参照と呼ばれ、動的配列関数を扱う上で必ず覚えておきたい書き方です。

組み合わせると生産性が爆上がりする関連テクニック

ドロップダウンリストと組み合わせてインタラクティブな検索ツールを作る

TEXTJOIN+FILTERの数式だけでも十分便利ですが、そこにデータの入力規則(ドロップダウンリスト)を組み合わせると、まるで専用のアプリケーションのような使い心地の検索ツールが作れます。

手順はこうです。まずUNIQUE関数で受注IDの一覧を動的に作り(=UNIQUE(B3:B19))、そのスピル範囲をドロップダウンリストのソースに設定します。「データ」→「データの入力規則」→「リスト」で、元の値に =スピル先セル# を指定するだけです。これで受注IDが増えても自動的にドロップダウンに反映されます。

あとはドロップダウンで選んだIDを参照するセルJ2に向けて、=TEXTJOIN(“、”, TRUE, FILTER(E3:E19, B3:B19=J2)) を書くだけ。ドロップダウンでIDを選ぶたびに、対応する製品一覧がリアルタイムで変わります。これを同僚に見せると「え、これどうやってるの?」と高確率で驚かれます。

条件付き書式と組み合わせて検索結果を色でハイライトする

検索結果をセルに表示するだけでなく、元の表でも一致したセルを自動でハイライトできると視認性が上がります。条件付き書式とFILTER(またはMATCH)を組み合わせるテクニックです。

元データの受注ID列(B3:B19)を選択した状態で、「条件付き書式」→「新しいルール」→「数式を使用して書式設定するセルを決定」を選びます。数式欄に =B3=$J$2 と入力して好きな色を設定すれば、J2で選んだIDと一致する行が自動でハイライトされます。ドロップダウンと組み合わせると、選んだIDの行がリアルタイムで色づくダッシュボード風の表が完成します。

Power Queryと使い分けてデータ前処理をもっと楽にする

「毎月CSVをインポートして同じ集約作業を繰り返している」という方には、Power Query(パワークエリ)との組み合わせも検討する価値があります。Power Queryは「データの取得と変換」から使える機能で、データの読み込み・整形・集約を記録して繰り返し実行できます。

特に、今回のようなIDごとの値集約は、Power QueryのグループBy機能で「値を一覧にまとめる」処理が可能です(M言語でText.Combine関数を使います)。一度クエリを設定しておけば、毎月CSVをフォルダに入れて「更新」ボタンを押すだけで同じ処理が走ります。FILTER+TEXTJOINは単発の検索向き、Power Queryは定期的な一括処理向きと使い分けると、両方のいいところを活かせます。

名前付き範囲でテーブル全体を管理してメンテを楽にする

数式が長くなってくると「どのセル範囲を参照しているのかわからなくなってきた」という問題が起きます。そこでぜひ使ってほしいのがテーブル機能(Ctrl+Tでデータをテーブル化)と名前付き範囲の組み合わせです。

データをテーブルにすると、列名で参照できるようになります。例えばテーブル名を「受注テーブル」にすると、FILTERの数式が次のように書き直せます。

=TEXTJOIN(“、”, TRUE, FILTER(受注テーブル, 受注テーブル=J2))

これだとセル番地(B3:B19)より格段に読みやすいですし、テーブルに行が追加されても自動で範囲が広がるので数式の修正が不要になります。実務でこの設計を入れておくだけで、後からメンテナンスするときの手間がまったく変わります。

ぶっちゃけこうした方がいい!

ここまで色々と紹介してきましたが、正直なところを言います。

まずデータをテーブル化することを最初に習慣にしてください。それだけで、この記事で紹介したテクニックの8割が「維持管理の手間ゼロ」で動き続けます。多くの方がFILTERやTEXTJOINの数式に詰まる原因の大半は、「参照範囲がズレた」「行が増えて範囲外になった」という問題です。テーブル化していれば、これが根本から消えます。

次に、TEXTJOIN+FILTERの数式は覚えるより「コピーして使う」スタンスでいいと思っています。私自身、毎回ゼロから書こうとは思っていません。よく使う数式パターンをメモ帳か専用のExcelシートに保存しておいて、必要なときに貼り付けてセル範囲だけ直す。これが一番速い。「関数を暗記しなきゃ」と焦る必要は全然ないんです。

そしてもう一つ、Microsoft 365のサブスクリプションに切り替える価値は本当に大きいです。FILTER関数もSORT関数もUNIQUE関数もGROUPBY関数も、すべてMicrosoft 365があってこそ使えます。Excelの永続ライセンス版(Office 2019や2021)では使えない関数がどんどん増えています。会社の環境を変えるのが難しい方でも、個人のパソコンでMicrosoft 365 Personalを契約しておくだけで、自宅で最新テクニックを試して仕事のスキルを磨けます。

最後に一番伝えたいことを言います。帳票形式のデータを「どう集計するか」で悩む前に、そもそも「なぜ帳票形式になっているのか」を疑ってください。入力の段階からフラットなテーブル形式(1行1レコード、空白なし)にしておけば、今回のようなFILTER+TEXTJOINの工夫も不要になります。データ設計の段階で少し考えるだけで、下流の集計・分析作業が劇的に楽になります。「Excelで頑張る」よりも「Excelで頑張らなくて済む設計にする」という視点こそ、長くExcelを使ってきた私が一番強調したい考え方です。

このサイトをチップで応援

XLOOKUPやFILTER関数に関するよくある疑問を解決!

FILTERで条件に一致するものが1件もなかったとき、エラーを出さないようにするには?

FILTER関数の第3引数(空の場合)に表示したい値を入れれば解決します。例えば「該当なし」と表示したい場合は下記のように書きます。

=TEXTJOIN(“、”, TRUE, FILTER(E3:E19, B3:B19=J2, “該当なし”))

第3引数を省略すると条件に一致するものがない場合に「#CALC!」エラーが出てしまうので、必ず設定しておくことをおすすめします。

FILTER関数の結果に#N/Aエラーが混ざっているとおかしな結果になるのはなぜ?

元データの中にエラー値(#N/Aや#VALUE!など)が含まれていると、FILTER関数がそのエラーをそのまま処理しようとして結果全体がエラーになることがあります。このときはIFERROR関数でエラーを事前に除去するか、元データのエラー値をなくしてから使うのが基本です。

=TEXTJOIN(“、”, TRUE, FILTER(IFERROR(E3:E19,””), B3:B19=J2))

のように書けば、エラーセルを空白として扱ってくれるので安全です。

この組み合わせ技はMac版Excelでも使えますか?

はい、Microsoft 365のサブスクリプションを利用していれば、Windows版・Mac版どちらでもFILTER関数、TEXTJOIN関数、SORT関数、UNIQUE関数、GROUPBY関数などが使えます。ただし、Excel 2019以前の永続ライセンス版ではFILTERやSORT、UNIQUEは使えません。その場合は前述のTEXTJOIN+IFの配列数式が代替になります。

今すぐパソコンやスマホの悩みを解決したい!どうしたらいい?

LINE公式

いま、あなたを悩ませているITの問題を解決します!
「エラーメッセージ、フリーズ、接続不良…もうイライラしない!」

あなたはこんな経験はありませんか?

✅ ExcelやWordの使い方がわからない💦
✅ 仕事の締め切り直前にパソコンがフリーズ💦
✅ 家族との大切な写真が突然見られなくなった💦
✅ オンライン会議に参加できずに焦った💦
✅ スマホの重くて重要な連絡ができなかった💦

平均的な人は、こうしたパソコンやスマホ関連の問題で年間73時間(約9日分の働く時間!)を無駄にしています。あなたの大切な時間が今この悩んでいる瞬間も失われています。

LINEでメッセージを送れば即時解決!

すでに多くの方が私の公式LINEからお悩みを解決しています。

最新のAIを使った自動応答機能を活用していますので、24時間いつでも即返信いたします。

誰でも無料で使えますので、安心して使えます。

問題は先のばしにするほど深刻化します。

小さなエラーがデータ消失重大なシステム障害につながることも。解決できずに大切な機会を逃すリスクは、あなたが思う以上に高いのです。

あなたが今困っていて、すぐにでも解決したいのであれば下のボタンをクリックして、LINEからあなたのお困りごとを送って下さい。

相談しに行く

ぜひ、あなたの悩みを私に解決させてください。

まとめ

VLOOKUPもXLOOKUPも「最初の1件だけ」という制限があり、複数行に分かれたデータをまとめて取り出すには力不足です。そこでFILTER関数で条件に一致する全件を取り出し、TEXTJOIN関数で任意の区切り文字を使って1セルにまとめるというのが、現在の主流かつ最もわかりやすい解決策です。

さらにSORT関数で順番を整えたり、UNIQUE関数で重複を除いたり、最新のGROUPBY関数で表全体を自動集計したりと、応用の幅は非常に広いです。今日紹介した数式は、どれも明日から実務で使えるものばかりです。

まずは=TEXTJOIN(“、”, TRUE, FILTER(対象列, ID列=検索値)) という1行の数式から試してみてください。「XLOOKUPでは無理だった…」と諦めていた集計が、あっけなく解決するはずです。Excelは知れば知るほど、あなたの仕事を速くしてくれます。

この記事を書いた人
この記事を書いた人

企業の情報システム部門で10年以上、PC・アカウント・社内ネットワーク・Microsoft 365/Google Workspace運用を担当。年間数百件の問い合わせ対応(PC不調、メール送受信、Excel/Word資料、Teams会議、スマホ連携など)を通じて、初心者がつまずくポイントを「再現→原因切り分け→最短解決」の手順に落とし込んできました

現場や身近で実際に起きたトラブルをベースに、手順だけでなく「なぜそうなるか」「失敗しやすい落とし穴」「安全な設定(セキュリティ)」まで含めて解説します。

相談窓口(問い合わせ/LINE等)を設け、記事で解決しないケースも個別にサポートしていますので「パソコンが急に動かなくなった」「スマホの設定がわからない」などの悩みは一人で抱え込まず、お気軽にご相談ください。

【お問い合わせは下記URLから】
https://m32006400n.xsrv.jp/inquiry-form/

【公式LINEは下記URLから】
https://lin.ee/t8TDjcj

uri uriをフォローする
スポンサーリンク
よかったらシェアしてね! /
uri uriをフォローする

コメント

タイトルとURLをコピーしました