カメニッキ

カメとインコと釣りの人です

VB6で配列の重複を除去する

Rubyやった後にVBを触ると吐き気がします…。

言語機能として重複を削除する関数はありませんので、自作します。

Dictionaryの重複を許さないという性質を利用し、

'引数は参照渡しで受け取る。
Public Sub removeArrayDuplication(ByRef arr As Variant)
  Dim dic As Object
  Dim myKey As Variant
  Dim val As Variant
  Set dic = CreateObject("Scripting.Dictionary")
  Dim keys
  '引数で受け取った配列の全要素分ループ
  For Each val In arr
    'dictionary内に同一キーが無いことを確認
    If Not dic.Exists(val) Then
      'dictionaryに追加
      dic.Add val, Null
    End If
  Next

  '配列の要素数を変更
  ReDim arr(dic.Count - 1)
  keys = dic.keys
  Dim i As Integer
  'dictionary全てを配列に再度格納
  For i = 0 To dic.Count - 1
    arr(i) = keys(i)
  Next i

  Set dic = Nothing
End Sub

エラー処理とかはしてないです。