VBA – 配列から重複を削除する

Written by

Editorial Team

Reviewed by

Steve Rynearson

Translated by

masahiro yoshida

Last updated on 8月 1, 2022

このチュートリアルでは、VBAで配列から重複を削除する方法について説明します。

重複の削除

VBAの配列から重複を削除する最も簡単な方法は、配列の値をVBAのコレクションに代入し、その値を配列に戻すことです。コレクションは値の重複を許さないので、コレクションを使用することで配列から重複を取り除くことができます。 このタスクを実行するための関数を作成しました。

Function ArrayRemoveDups(MyArray As Variant) As Variant
    Dim nFirst As Long, nLast As Long, i As Long
    Dim item As String
    
    Dim arrTemp() As String
    Dim Coll As New Collection

    '配列の先頭と末尾の位置を取得する
    nFirst = LBound(MyArray)
    nLast = UBound(MyArray)
    ReDim arrTemp(nFirst To nLast)

    '配列を文字列に変換する
    For i = nFirst To nLast
        arrTemp(i) = CStr(MyArray(i))
    Next i
    
    '一時的なコレクションを入力する
    On Error Resume Next
    For i = nFirst To nLast
        Coll.Add arrTemp(i), arrTemp(i)
    Next i
    Err.Clear
    On Error GoTo 0

    '配列のリサイズ
    nLast = Coll.Count + nFirst - 1
    ReDim arrTemp(nFirst To nLast)
    
    '配列の投入
    For i = nFirst To nLast
        arrTemp(i) = Coll(i - nFirst + 1)
    Next i
    
    '配列の出力
    ArrayRemoveDups = arrTemp

End Function

Sub ArrTest()
    Dim strNames(1 To 4) As String
    Dim outputArray() As String
    Dim i As Long
    Dim item As Variant

    '配列の初期値の設定
    strNames(1) = "シェリー"
    strNames(2) = "スティーブ"
    strNames(3) = "ニーマ"
    strNames(4) = "スティーブ"
    
    'Dup関数の呼び出し
    outputArray = ArrayRemoveDups(strNames)
    
    'イミディエイトウィンドウに値を出力(CTRL + G)
    For Each item In outputArray
        Debug.Print item
    Next item

End Sub

注:この例では、配列の開始点を0ではなく1に設定しています。もし、配列が0から始まる場合は、このコードを少し修正する必要があります。

配列の中身を文字列に変換していることに注目してください。必要であれば、処理終了後に文字列を整数に戻すこともできます。

vba-free-addin

VBA Code Examples Add-in

Easily access all of the code examples found on our site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(No installation required!)

Free Download

Return to VBA Code Examples