Excel VBAでA列とB列の重複キーを基にC列・D列へ抽出する方法(UNIQUE関数応用)

Visual Basic

Excel VBAでデータの重複抽出を行う際、単一列ではなく複数列をキーとして扱いたいケースは実務でも頻繁に発生します。特に「A列+B列を組み合わせたキーで重複判定し、その結果をC列・D列に出力したい」という処理は、データ整形やマスタ作成でよく使われる考え方です。本記事ではUNIQUE関数とVBAを組み合わせた実用的な方法を解説します。

複数列をキーにした重複抽出の考え方

今回のポイントは「A列単体ではなく、A列とB列をセットで1つのキーとして扱う」ことです。

例えばA列に顧客ID、B列に商品コードがある場合、それらを組み合わせて初めて一意のデータになります。

このような場合は配列結合または補助列を使ってキー化するのが基本です。

UNIQUE関数で複数列を扱う方法

ExcelのUNIQUE関数は複数列範囲にも対応しており、A:Bのように指定することで行単位の重複排除が可能です。

VBAではWorksheetFunction.Uniqueを使う際に、Rangeを複数列に拡張することで同様の処理ができます。

例:Set dataRange = ws.Range(“A1:B” & lastRow)

VBAでA列+B列をキーとして抽出する方法

実務的には「配列で結合キーを作る」方法が安定します。

A列とB列を連結してDictionaryのキーにすることで、完全一致の重複判定が可能になります。

その後、C列・D列に出力することで目的の形式を作成できます。

サンプルVBAコード(A+Bキー抽出)

以下はA列とB列をキーにして重複を除去し、C列・D列へ出力する基本コードです。

Dim ws As Worksheet: Set ws = ActiveSheet
Dim lastRow As Long: lastRow = ws.Cells(ws.Rows.Count, “A”).End(xlUp).Row
Dim dict As Object: Set dict = CreateObject(“Scripting.Dictionary”)
Dim i As Long, key As String

For i = 2 To lastRow
key = ws.Cells(i, “A”).Value & “|” & ws.Cells(i, “B”).Value
If Not dict.exists(key) Then dict.Add key, Array(ws.Cells(i, “A”).Value, ws.Cells(i, “B”).Value)
Next i

Dim r As Long: r = 1
For Each k In dict.keys
ws.Cells(r, “C”).Value = dict(k)(0)
ws.Cells(r, “D”).Value = dict(k)(1)
r = r + 1
Next k

補足:UNIQUE関数との使い分け

簡易的な処理であればUNIQUE関数で十分ですが、VBAで柔軟な条件処理を行う場合はDictionary方式が適しています。

特に後続処理(集計・加工・並び替え)がある場合はVBAでキー管理する方法が安定します。

処理の目的に応じて関数とVBAを使い分けることが重要です。

まとめ

A列とB列を組み合わせた重複判定は、補助キー化またはDictionaryを使うことで実現できます。

UNIQUE関数でも対応可能ですが、柔軟性を求める場合はVBAでキー管理する方法が最も実務向きです。

データ構造を正しく設計することで、C列・D列への出力もスムーズに行えます。

コメント

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