辞書に格納することにより、重複のあるデータから重複のないリストを作成するVBAを紹介します。
売上データを、日にち・商品名・販売先などごとに集計する時は、まず、それらの項目ごとのリストを作ることに時間を取られるなぁ。
データ量が多くなればなるほど手作業では難しくなりますね。
今回はそういったリスト作成に役立つVBAの紹介です。
データを辞書に格納しリストを作成する
VBA
Sub リスト作成()
Dim myDic As Object, myKey As Variant
Dim c As Variant, varData As Variant
Dim d As String
Set myDic = CreateObject(“Scripting.Dictionary”)
With Worksheets(“Sheet1”)
varData = .Range(“A1”, .Range(“A” & Rows.Count).End(xlUp)).Value
End With
For Each c In varData
If Not c = Empty Then
If Not myDic.Exists(c) Then
End If
End If
Next
myKey = myDic.Keys
Sheets(“Sheet2”).Select
For i = 0 To myDic.Count – 1
Cells(i + 1 , 1).Value = myKey(i)
Next i
Set myDic = Nothing
End Sub
解説
リストの出力を列ラベル(縦方向)ではなく、行(横方向)ラベルで出力する場合↓↓↓
Cells(1, i + 1).Value = myKey(i)
‘1行目のAから
辞書を使用せずに重複のないリストを作成する
VBA
Sub リスト作成()
Dim a, i As Long
Sheets(“Sheet1”).Select
a = Cells(Rows.Count, 1).End(xlUp).Row
Range(Cells(1, 1), Cells(a, 1)).Sort Key1:=Range(“A1”), Order1:=xlAscending, DataOption1:=xlSortTextAsNumbers, Header:=xlYes
For i = 2 To a
If Cells(i, 1) <> Cells(i – 1, 1) Then
Cells(i, 2) = Cells(i, 1)
End If
Next i
Rows(“1:1”).AutoFilter
Selection.AutoFilter Field:=2, Criteria1:=”<>”
Range(Cells(1, 2), Cells(a, 2)).Copy Destination:=Sheets(“sheet2”).Cells(1, 1)
Rows(“1:1”).AutoFilter
Sheets(“Sheet2”).Select
End Sub
解説
データ量が増えると処理時間が増えるので、辞書に格納する方法をお薦めします。
コメント