VBA – 配列から重複を削除する
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から始まる場合は、このコードを少し修正する必要があります。
配列の中身を文字列に変換していることに注目してください。必要であれば、処理終了後に文字列を整数に戻すこともできます。