Excelで複数の列から一意の値を抽出するにはどうすればよいですか?

Excelで複数の列に広がるデータセットを扱うことがよくある場合、同じ列内または異なる列間で特定の値が重複している状況に直面することがあります。多くのレポート作成やデータ分析タスクでは、どこにあっても全体の選択範囲内で一度しか出現しないすべての一意の値を特定し、抽出することが必要になります。これを手動で行うと、特に大規模なデータセットや複雑なテーブルを扱う場合、時間がかかり間違いやすいです。幸い、Excelにはこれらのユニークな値を効率的に抽出するためのさまざまな方法があります。
このガイドでは、お使いのExcelのバージョンや好みに基づいて使用できるいくつかの解決策を紹介します。たとえば、すべてのバージョンに適した数式、最新バージョンでの動的配列数式、シンプルな結果を得るためのKutools AI アシスタントの使用、視覚的な統合のためのピボットテーブル、複雑なシナリオでの自動抽出のためのVBAコードなどです。
数式を使用して複数列から一意の値を抽出する
組み込みのExcel関数を使ってこの抽出を行いたい場合もあります。このセクションでは、すべてのExcelバージョンに対応する配列数式と、Excel 365やExcel 2021などの新しいバージョンで利用可能な動的配列数式の2つのアプローチを使用する方法について詳しく説明します。これらの方法は、直接的な数式ベースのソリューションが必要な場合や、データの変更に伴う頻繁な更新が必要な場合、外部のアドインやコードを避けたい場合に理想的です。
すべてのExcelバージョンに対応する配列数式で複数列から一意の値を抽出する
すべてのExcelバージョンで互換性を持たせるために、配列数式を使用することで、Excelが動的配列をサポートしていない場合でも、複数の列から一意の値を抽出できます。このアプローチは、INDIRECT、TEXT、MIN、IF、COUNTIF、ROW、COLUMN関数を組み合わせて使用するため、さまざまなデータ構造に対応可能です。
データが範囲A2:C9にあると仮定します。セルE2から一意の値を抽出するには、次の手順に従ってください:
1. 出力範囲の最初のセル(E2など)をクリックし、以下の配列数式を入力します:
=INDIRECT(TEXT(MIN(IF(($A$2:$C$9<>"")*(COUNTIF($E$1:E1,$A$2:$C$9)=0),ROW($2:$9)*100+COLUMN($A:$C),7^8)),"R0C00"),)&""
- A2:C9は、一意の値を抽出したいデータ範囲です。
- E1:E1は、最初に出力するセルのすぐ上にあるセルを指しており、すでに出力されたエントリを追跡するために必要です。
- $2:$9はあなたのデータの行参照、$A:$Cは列参照です。ワークシートのレイアウトに合わせてこれらを調整してください。
2. 数式を入力したら、Enterキーを押すだけではなく、Ctrl + Shift + Enterを同時に押して配列数式として確定します。正しく行った場合、数式バーに中括弧 {} が表示されます。その後、E2のフィルハンドルを列方向にドラッグします。空白セルが現れるまでドラッグを続けることで、抽出すべき一意の値がなくなったことを示します。このプロセスにより、すべての一意の値がターゲット列に表示されます。
- $A$2:$C$9: 一意の値を確認するための全セルセットを指定します。
- IF(($A$2:$C$9<>"")*(COUNTIF($E$1:E1,$A$2:$C$9)=0), ROW($2:$9)*100+COLUMN($A:$C),7^8):
- $A$2:$C$9<>"" は、空白セルを無視することを保証します。
- COUNTIF($E$1:E1,$A$2:$C$9)=0 は、まだ抽出されていない新しい値のみが含まれることを確実にします。
- 両方の条件が真の場合、対応する出力は、セルの行と列に基づく計算となり、一意のインデックス番号を生成します。
- どちらかの条件が偽の場合、数式は非常に大きな数値(7^8)を返し、誤って選択されることを防ぎます。
- MIN(...): 最低のインデックス番号を識別し、データ内の次の利用可能な一意の値の位置を効果的に特定します。
- TEXT(...,"R0C00"): インデックスをR1C1形式の有効なセル参照に変換します。
- INDIRECT(...): 上記で作成されたセル参照をデータ範囲からの値に変換します。
- &"": 数式の結果をテキストとして処理することを強制し、フォーマットの不具合を防ぎます。
Excel 365、Excel 2021、および新しいバージョンの数式を使用して複数列から一意の値を抽出する
Excel 365、Excel 2021、または新しいバージョンを使用している場合、動的配列関数を利用でき、複数列から一意の値を抽出する簡単で直感的な方法が提供されます。UNIQUE関数とTOCOL関数は、データを結合して重複を一括で排除するため、特にデータが常に更新される場合や大規模なデータセットを扱う場合に役立ちます。
この方法を使用するには、単に空白のセル(例えばE2、または結果を表示したい任意の場所)を選択し、この数式を入力してEnterキーを押します:
=UNIQUE(TOCOL(A2:C9,1))
Enterキーを押すと、範囲A2:C9からすべての一意の値が数式の下のセルに自動的に展開されます。この機能は特に効率的で、元のデータが変更されると出力も動的に更新され、手動での再読み込みの手間を省きます。
- TOCOL(A2:C9,1): 複数列の値の範囲を単一列に変換し、空白セルを自動的に削除します。
- UNIQUE(...): 各値を1回だけ抽出し、クリーンで重複のないリストを提供します。
Kutools AI アシスタントを使用して複数列から一意の値を抽出する
より簡素化されたアプローチを希望し、手動操作を減らしたい場合、Kutools for ExcelのKutools AI アシスタントを使用すると、複数列から簡単に一意の値を抽出できます。この方法は、特に数式に精通していない場合や、数式エラーのリスクを回避したい場合に価値があります。Kutools AI アシスタントは指示を解釈し、データを自動的に処理するため、初心者や迅速なソリューションを求めるユーザーにとって理想的です。
インストール後、Kutools AI>AI アシスタントをクリックして「Kutools AI アシスタント」ペインを開きます:
- チャットボックスにリクエストを入力します。例えば、「範囲A2:C9から一意の値を抽出し、空白セルを無視し、結果をE2から開始して配置してください:」
- 「送信」をクリックするかEnterキーを押して、AIがリクエストを解析したら、「実行」をクリックして実行します。結果は指定した場所に即座に表示されます。
ヒント: このソリューションは、データ抽出のワークフローが変わる場合や自然言語処理機能が必要な場合に非常に便利です。元のデータが完全に一貫していない場合、空のセルが含まれたり除外されたりする可能性があるため、抽出されたリストを再度確認することを忘れないでください。
ピボットテーブルを使用して複数列から一意の値を抽出する
ピボットテーブルは、一意の値を抽出するもう一つの便利な方法であり、特に視覚的なツールを好む場合や、出現回数をカウントするなど、一意の項目を要約またはさらに分析する場合に適しています。このアプローチは簡単で数式は不要ですが、設定と若干のデータ並べ替えが必要であり、特に含まれる列が異なる見出しを持っている場合にはそうです。
ピボットテーブルを使用して一意の値を抽出するための推奨プロセスは以下の通りです:
1. データのすぐ左側に新しい空白列を挿入します。例えば、データがB列から始まる場合、新しい列Aを挿入します。この調整により、正しい範囲の統合が確保されます。
2. データセット内の任意のセルを選択し、Alt + Dを押し、すぐにPを押して「ピボットテーブルとピボットチャートウィザード」を起動します。ウィザードの最初のステップで「複数の統合範囲」を選択します。これにより、多数の列から値を結合して単一の集計フィールドにすることができます。
3. 「次へ」をクリックし、「単一ページフィールドを作成する」を選択します。このステップにより、すべてのデータが単一のグループとして整理され、一意の値の抽出が容易になります。
4. 次のステップで、新しい空白列を含むすべてのデータ範囲を選択し、「追加」ボタンをクリックして選択範囲を「すべての範囲」リストに取り込み、「次へ」をクリックします。
5. ウィザードの最後のステップで、ピボットテーブルを配置したい場所(新しいワークシートまたは既存のシート)を選択し、「完了」をクリックしてピボットテーブルレポートを生成します。
6. 新しいピボットテーブルで、「レポートに追加するフィールドを選択」セクションのすべてのフィールドのチェックを外して、デフォルトビューをクリアします。
7. 最後に、「値」フィールドを「行」エリアにドラッグします。ピボットテーブルは、元の複数列範囲からすべての一意の値を整然と一列に表示します。
制限事項: データは予備的な整理が必要で、元のデータセットが更新された場合、新しい一意の値を見るにはピボットテーブルを更新する必要があります。
VBAコードを使用して複数列から一意の値を抽出する
自動化された抽出が必要な場合や、大規模で不規則なデータセットを扱う場合、VBA(Visual Basic for Applications)コードを使用すると迅速で再利用可能な解決策を提供できます。これは、Excel VBAエディターに基本的な知識を持つユーザー、または手動操作を最小限にしたい繰り返しのタスクに向いています。VBAは、配列数式よりも大量のデータをより効率的に処理できます。
1. Alt + F11を押してVBAエディターを開きます。「Microsoft Visual Basic for Applications」ウィンドウが表示されたら、「挿入」>「モジュール」をクリックして新しいモジュールを追加します。
2. 新しいモジュールに、以下のコードを貼り付けます:
VBA: 複数列から一意の値を抽出する
Sub Uniquedata()
'Updateby Extendoffice
Dim rng As Range
Dim InputRng As Range, OutRng As Range
Set dt = CreateObject("Scripting.Dictionary")
xTitleId = "KutoolsforExcel"
Set InputRng = Application.Selection
Set InputRng = Application.InputBox("Range :", xTitleId, InputRng.Address, Type:=8)
Set OutRng = Application.InputBox("Out put to (single cell):", xTitleId, Type:=8)
For Each rng In InputRng
If rng.Value <> "" Then
dt(rng.Value) = ""
End If
Next
OutRng.Range("A1").Resize(dt.Count) = Application.WorksheetFunction.Transpose(dt.Keys)
End Sub
3. F5キーを押してコードを実行します。ダイアログが表示され、データ範囲を選択するよう促されます。関連するすべての列(空白セルを含むものも含む)を選択します。
4. 「OK」をクリックすると、別のプロンプトが表示され、一意の値を出力する場所を指定します。結果をリストしたい先頭のセル(例:E2)を指定します。
5. 「OK」をクリックすると、マクロが自動的に実行され、指定した場所からすべての一意の値が表示されます。
- 数式を使用中に #VALUE! や #SPILL! のようなエラーが発生した場合、範囲を確認し、出力エリアがクリアであることを確認してください。
- データ範囲に隠し行や結合されたセルがないか常に確認してください。これらは一意の値の抽出の正確さに影響を与える可能性があります。
- 配列および動的配列数式は変更とともに自動的に更新されますが、高度なフィルターやピボットテーブルの解決策は手動での更新または再実行が必要になる場合があります。
- 繰り返しのタスクについては、一貫性とスピードのためにVBAを使用して抽出を自動化することを検討してください。
- 特に複雑なワークブックの場合、大量の抽出や自動化ルーチンを適用する前にデータをバックアップしてください。
関連記事:
- リストから一意および異なる値の数をカウントする
- いくつかの重複項目を含む長いリストがあり、特定の列に存在する一意の値(一度しか出現しない値)や総異なる値の数をカウントしたいとします。この記事では、Excelで一意および異なるエントリを効率的にカウントする方法を説明します。
- Excelで条件に基づいて一意の値を抽出する
- たとえば、A列の特定の条件に基づいてB列から一意の名前のみを抽出し、スクリーンショットのように結果を得たいとします。このチュートリアルでは、一意の値を抽出する際に条件を適用する方法を示します。
- Excelでは一意の値のみを許可する
- ワークシートの列に一意のエントリのみを許可し、重複値を防ぎたい場合、この記事ではExcelで一意性ルールを強制するための実践的な技術を紹介します。
- Excelで条件に基づいて一意の値を合計する
- たとえば、隣接する列の名前に基づいて「注文」列内のユニークな値のみを合計したい場合があります。この記事では、一意性と条件付き計算を組み合わせる方法について説明します。
最高のオフィス業務効率化ツール
🤖 | Kutools AI Aide:データ分析を革新します。主な機能:Intelligent Execution|コード生成|カスタム数式の作成|データの分析とグラフの生成|Kutools Functionsの呼び出し…… |
人気の機能:重複の検索・ハイライト・重複をマーキング|空白行を削除|データを失わずに列またはセルを統合|丸める…… | |
スーパーLOOKUP:複数条件でのVLookup|複数値でのVLookup|複数シートの検索|ファジーマッチ…… | |
高度なドロップダウンリスト:ドロップダウンリストを素早く作成|連動ドロップダウンリスト|複数選択ドロップダウンリスト…… | |
列マネージャー:指定した数の列を追加 |列の移動 |非表示列の表示/非表示の切替| 範囲&列の比較…… | |
注目の機能:グリッドフォーカス|デザインビュー|強化された数式バー|ワークブック&ワークシートの管理|オートテキスト ライブラリ|日付ピッカー|データの統合 |セルの暗号化/復号化|リストで電子メールを送信|スーパーフィルター|特殊フィルタ(太字/斜体/取り消し線などをフィルター)…… | |
トップ15ツールセット:12 種類のテキストツール(テキストの追加、特定の文字を削除など)|50種類以上のグラフ(ガントチャートなど)|40種類以上の便利な数式(誕生日に基づいて年齢を計算するなど)|19 種類の挿入ツール(QRコードの挿入、パスから画像の挿入など)|12 種類の変換ツール(単語に変換する、通貨変換など)|7種の統合&分割ツール(高度な行のマージ、セルの分割など)|… その他多数 |
Kutools for ExcelでExcelスキルを強化し、これまでにない効率を体感しましょう。 Kutools for Excelは300以上の高度な機能で生産性向上と保存時間を実現します。最も必要な機能はこちらをクリック...
Office TabでOfficeにタブインターフェースを追加し、作業をもっと簡単に
- Word、Excel、PowerPointでタブによる編集・閲覧を実現。
- 新しいウィンドウを開かず、同じウィンドウの新しいタブで複数のドキュメントを開いたり作成できます。
- 生産性が50%向上し、毎日のマウスクリック数を何百回も削減!
全てのKutoolsアドインを一つのインストーラーで
Kutools for Officeスイートは、Excel、Word、Outlook、PowerPoint用アドインとOffice Tab Proをまとめて提供。Officeアプリを横断して働くチームに最適です。





- オールインワンスイート — Excel、Word、Outlook、PowerPoint用アドインとOffice Tab Proが含まれます
- 1つのインストーラー・1つのライセンス —— 数分でセットアップ完了(MSI対応)
- 一括管理でより効率的 —— Officeアプリ間で快適な生産性を発揮
- 30日間フル機能お試し —— 登録やクレジットカード不要
- コストパフォーマンス最適 —— 個別購入よりお得