配列(Dictionary)

指定したセル範囲をDictionaryに格納する(重複削除する)【ExcelVBA】

指定セル範囲をDictionaryに格納して重複削除したい

配列の場合、気にせずセル範囲を格納できますが、
Dictionaryの場合は重複チェックをしないといけない為、少し手順を考えないといけません。
■やりたいこと
・特定セル範囲(一次元/二次元)の表をDictionaryに格納したい。
Dictionaryに格納する事で重複を削除したい。
・単純に重複を削除するのみである=Keyは使用する。Itemは使用しない。

指定セル範囲をDictionaryに格納するサンプルコード

'参照設定 Microsoft Scripting Runtime
Public Function RangeToDictionary(rng As Range) As dictionary
    Dim dic As dictionary
    Set dic = New dictionary
    
    Dim rCell As Range
    
    For Each rCell In rng
        If rCell <> "" Then
            If dic.Exists(rCell.Value) = False Then
                dic.Add rCell.Value, rCell.Value
            End If
        End If
    Next
        
    If dic.Count <> 0 Then
       Set RangeToDictionary = dic
    End If
End Function

実際の使い方

'■任意のセル範囲をDictionaryに格納する(結果をdictionaryで受け取る)
Public Sub sample()
    Dim arr As dictionary
    
    Range("A1:E5").Value = "a"
    
    Set arr = RangeToDictionary(Range("A1:E5"))
    
    Debug.Print arr.Count   '1(セル範囲には値は「a」のみなので1つしかdicに入らない)
    Debug.Print arr.items(0)      'a

    'Set arr = RangeToDictionary(Range("A1:E5"))の代わりに
    'Set arr = RangeToDictionary(Range("A1:A5"))や
    'Set arr = RangeToDictionary(Range("A1:E1"))でも結果は同一です。

End Sub

関連記事

コメント

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