Excel VBA 逆引き集 | 一意リスト作成

Excel VBA
スポンサーリンク

一意リスト作成(ユニーク化)

Excel VBAで「重複を除いた一意リストを作りたい」場面はよくあります。
例えば「顧客コード一覧」「商品名一覧」「カテゴリ一覧」など。初心者向けに、コード例やテンプレートをかみ砕いて説明します。


基本の考え方

  • Dictionaryを使う → キーは重複不可なので、ユニーク化に最適。
  • Collectionでも可能 → ただし重複チェックが少し面倒。
  • Rangeを配列に読み込んで処理 → 大量データでも高速。

テンプレ1:配列から一意リストを作成(Dictionary)

Sub UniqueList_Array()
    Dim fruits As Variant
    fruits = Array("りんご", "みかん", "バナナ", "りんご", "ぶどう")

    Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary")
    Dim f As Variant
    For Each f In fruits
        dict(f) = True ' キーだけ使う
    Next f

    ' 一意リストを出力
    Dim k As Variant
    For Each k In dict.Keys
        Debug.Print k
    Next k
End Sub
VB
  • 結果: りんご みかん バナナ ぶどう

テンプレ2:シートの列から一意リストを作成

Sub UniqueList_Sheet()
    Dim ws As Worksheet: Set ws = Worksheets("Data")
    Dim lastRow As Long: lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    Dim rg As Range: Set rg = ws.Range("A2:A" & lastRow)
    Dim v As Variant: v = rg.Value

    Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary")
    Dim r As Long
    For r = 1 To UBound(v, 1)
        dict(v(r, 1)) = True
    Next r

    ' 一意リストをB列に出力
    Dim i As Long: i = 2
    Dim k As Variant
    For Each k In dict.Keys
        ws.Cells(i, 2).Value = k
        i = i + 1
    Next k
End Sub
VB
  • ポイント:
    • A列のデータをユニーク化してB列に出力。
    • 顧客コードや商品名の一覧作成に便利。

テンプレ3:一意リストを配列として取得

Function GetUniqueArray(rg As Range) As Variant
    Dim v As Variant: v = rg.Value
    Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary")

    Dim r As Long
    For r = 1 To UBound(v, 1)
        dict(v(r, 1)) = True
    Next r

    GetUniqueArray = dict.Keys
End Function

Sub Example_UniqueArray()
    Dim ws As Worksheet: Set ws = Worksheets("Data")
    Dim arr As Variant
    arr = GetUniqueArray(ws.Range("A2:A20"))

    Dim i As Long
    For i = LBound(arr) To UBound(arr)
        Debug.Print arr(i)
    Next i
End Sub
VB
  • ポイント: 関数化しておけば再利用できる。

テンプレ4:一意リストをソートして出力

Sub UniqueList_Sorted()
    Dim fruits As Variant
    fruits = Array("りんご", "みかん", "バナナ", "りんご", "ぶどう")

    Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary")
    Dim f As Variant
    For Each f In fruits
        dict(f) = True
    Next f

    Dim arr As Variant: arr = dict.Keys
    ' ソート
    Dim i As Long, j As Long, tmp As String
    For i = LBound(arr) To UBound(arr) - 1
        For j = i + 1 To UBound(arr)
            If arr(i) > arr(j) Then
                tmp = arr(i)
                arr(i) = arr(j)
                arr(j) = tmp
            End If
        Next j
    Next i

    ' 出力
    For i = LBound(arr) To UBound(arr)
        Debug.Print arr(i)
    Next i
End Sub
VB
  • ポイント: ユニーク化した後にソートも可能。

例題で練習

'例1:配列からユニーク化
Sub Example1()
    UniqueList_Array
End Sub

'例2:シートの列からユニーク化
Sub Example2()
    UniqueList_Sheet
End Sub

'例3:関数でユニーク配列を取得
Sub Example3()
    Example_UniqueArray
End Sub

'例4:ユニーク化+ソート
Sub Example4()
    UniqueList_Sorted
End Sub
VB

初心者向けポイント

  • Dictionaryは重複不可 → キーを使えば自動的にユニーク化できる。
  • Keysで一覧取得 → 一意リストを配列として扱える。
  • シートの列も高速処理 → Rangeを配列に読み込んでユニーク化。
  • ソートも組み合わせ可能 → ユニーク化+並べ替えでさらに便利。

👉 この「一意リスト作成テンプレ」を覚えておけば、顧客コードや商品名の 重複除去・一覧作成 を高速に実務へ応用できます。

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