なずブログ

インフラSE、Java開発、リモートワークエンジニアな人のメモ帳

重複データを見つける~VBA講座:オブジェクトをdictionaryでためておく~

f:id:nazuna_0124:20170403224602p:plain

さーて同じようなお話3回目です。

ちょっとこの例でやるには不適当かもですが、

こういう使い方があるので一緒に覚えましょうのコーナー。



Sub オブジェクトを入れておく()
     Dim tmp
    
    Set tmp = Range("B2").CurrentRegion
    
    Dim dic As Scripting.dictionary
    
    Set dic = New dictionary
    
    Dim r As Range
    
    For Each r In tmp
        Dim col As Collection
        Set col = New Collection
                
    
        If dic.Exists(r.Text) = False Then
                col.Add r
                dic.Add r.Text, col
            Else
                dic(r.Text).Add r
            End If
    Next

   '----------------------ここからはデータを参照して色塗り
   Dim d
   Dim k
   
   For Each d In dic
        Debug.Print d, dic(d).Count
        
        If dic(d).Count = 2 Then
            For k = 1 To dic(d).Count
                dic(d)(k).Interior.Color = vbBlue
            Next
            
        ElseIf dic(d).Count = 3 Then
            For k = 1 To dic(d).Count
                dic(d)(k).Interior.Color = vbRed
            Next
        End If

   Next


End Sub


自分でいうのもなんですが、ややこしい。。。


とりあえず、最初のRange取得はSETでオブジェクト入れてます。



んで、重複チェックにdictionary使うのはおんなじ。


違うのはコレクションに1回追加して、コレクションごとを突っ込むことです。



こうしておくと、コレクション側の数を数えることでデータ数が参照できますし、


当たり前ですが、オブジェクト入ってるのでRange扱い

いろいろできるのがポイント。



前回はfor i多めでしたが、For eachばっかりなのも注目かもしれず。



あ! 色塗りの初期化わすれました←