Excelでデータを整理していると、「重複のあるリストから一意な値だけを抽出したい」「ユニークな値だけを別シートに出力して使いたい」といったニーズが生まれることは非常に多くあります。
たとえば、
顧客リストから1人1件ずつの名前を抽出して別シートで管理したい
商品マスタの一覧から重複のない商品コードだけを新シートにまとめたい
毎月の取引先を一覧にし、個別処理用にシートを作成したい
このようなケースでは、「一意データ(ユニークデータ)の抽出」と「別シートへの自動出力」を組み合わせることで、Excel作業の効率が一気に向上します。
本記事では、Excelで一意なデータを抽出し、それを別シートに自動で出力する方法を、関数・Power Query・VBAそれぞれの視点からわかりやすく解説します。
目次
一意データとは?重複削除とは違う処理
まず明確にしておきたいのが、「重複の削除」と「一意データの抽出」は似て非なる処理だということです。
用語 | 意味 |
---|---|
重複の削除 | 同一の行をブック内から消去(元データが変化) |
一意データの抽出 | 重複のない値だけを抜き出して表示(元データは保持) |
今回は、「元のデータはそのままに、一意な値だけを別シートへ出力する方法」を扱います。
【Excel】重複データをまとめる方法|関数・ピボット・Power Queryを使った実践テクニック
✅ Excel 365の「UNIQUE関数」で別シートに自動出力する方法
Excel 365以降では、「UNIQUE関数」を使えば、非常に簡単に一意な値の抽出が可能です。
手順
抽出元のシート(例:Sheet1)にデータがあるとします(A列に氏名)
別シート(例:Sheet2)のA1セルに以下の式を入力:
=UNIQUE(Sheet1!A2:A100)
自動的に、重複のないデータが縦に展開されます
特徴
データが更新されると、別シートの結果もリアルタイムに反映
1列でも複数列でも対応可能(=複数キーの一意抽出もOK)
並べ替えたい場合は
SORT(UNIQUE(...))
とネスト可
注意点
対応バージョンは Excel 365 / 2021 以降
セルが自動的に展開されるため、下方向に空きセルが必要
【Excel】削除せずに最新データだけを別シートへ出力する方法|関数・Power Query・VBAによる自動抽出テクニック
✅ フィルターの詳細設定で一意データを別シートへ出力する方法(全バージョン対応)
古いExcelバージョンでも使えるのが、「詳細設定フィルター」機能です。
操作手順
元データの範囲を選択
「データ」タブ →「詳細設定」
「別の場所にコピー」を選び、「重複を無視する」にチェック
コピー先の別シートのセルを指定
「OK」で一意データを抽出
特徴
Excel 2007以降すべてのバージョンに対応
数式不要で簡単に操作できる
注意点
データ更新時は手動で再実行が必要
出力先が常に同じであることに注意
【Excel】重複を削除して1つだけ残す方法|削除・抽出・自動化までの完全ガイド
✅ Power Queryでユニーク抽出+別シートへの出力する方法(更新対応)
Power Queryを使うと、元データの更新に応じて再抽出が可能な、持続性の高い仕組みを作ることができます。
手順
元データの範囲を選択 →「データ」タブ →「テーブルまたは範囲から」
Power Queryエディタが起動
対象列を右クリック →「重複の削除」
「閉じて読み込む」→「新しいワークシートに出力」
特徴
ノーコードで一意抽出+出力が可能
データ更新に対応(「更新」ボタンで再処理)
抽出条件のカスタマイズ(フィルタや並び替え)も可能
【Excel】重複データを抽出し件数をカウントする方法|関数・ピボット・Power Queryを活用した集計テクニック
✅ VBAで一意データを別シートに出力(自由度・大量処理向け)
より高度なカスタマイズや大量データへの対応が求められる場合は、**VBA(マクロ)**が最適です。
サンプルコード
Sub 一意データを別シートに出力()
Dim srcWs As Worksheet, destWs As Worksheet
Dim lastRow As Long, i As Long, destRow As Long
Dim dict As Object, value As Variant
Set srcWs = Worksheets("Sheet1")
Set destWs = Worksheets.Add
destWs.Name = "ユニーク出力"
Set dict = CreateObject("Scripting.Dictionary")
lastRow = srcWs.Cells(srcWs.Rows.Count, 1).End(xlUp).Row
destRow = 1
For i = 2 To lastRow
value = srcWs.Cells(i, 1).Value
If Not dict.exists(value) Then
dict.Add value, 1
destWs.Cells(destRow, 1).Value = value
destRow = destRow + 1
End If
Next i
MsgBox "一意な値を新しいシートに出力しました", vbInformation
End Sub
このマクロの特徴
「Sheet1」のA列から重複を除いた値を新しいシートに出力
データ量が多くても処理が高速
任意の列・範囲に変更可能(自由度が高い)
・一意データの抽出でよくある注意点
トラブル | 原因 | 解決策 |
---|---|---|
抽出結果に空白が含まれる | 空白セルもユニークと判定される | =UNIQUE(FILTER(範囲, 範囲<>"")) を使う |
スペース違いで別データと判定される | 全角・半角や余分なスペース | TRIM やCLEAN で前処理を行う |
順番がバラバラ | 自動並べ替えされない場合がある | SORT(UNIQUE(...)) で明示的に指定 |
・まとめ:Excelでの一意データ抽出+自動出力は実務の武器になる!
Excelでのデータ管理において、「一意なデータの抽出」と「別シートへの出力」は、集計・整理・報告書作成などに欠かせない基本操作です。
方法 | 特徴 |
---|---|
UNIQUE関数 | 最も簡単。Excel 365以降対応 |
詳細フィルター | バージョン問わず対応可能。マウス操作のみで実行可能 |
Power Query | 自動更新対応。複数列対応・高度な整形も可能 |
VBA | 高速・カスタマイズ性抜群。自動化にも最適 |
必要に応じて適切な方法を選び、日々のExcel業務をよりスマートにこなしていきましょう!