皆様こんにちは、ノグチです。
前回は、リスト処理にも便利に使える、Dictionaryオブジェクトをご紹介しました。
今回からは、Dictionaryオブジェクトのプロパティやメソッドを順にご紹介していきます。
そして最終的にはループで書かれた重複排除処理のコードを、Dictionaryオブジェクトを使った方法に置き換えていきましょう!
Dictionaryオブジェクトとは?や、宣言の方法は前回の記事でご紹介していますので、併せてご覧ください。
ループを使ったリストの重複排除処理のコード例
例えば、下のリスト。
B列の品目が同じレコードは在庫数を加算し、重複を取り除いてF、G列に出力したいとします。
上のリストの処理を、ループ文を複数使ったコードで表現するとこんな感じになります。
Sub TestList() Dim i As Long Dim j As Long Dim flgFind As Long Dim maxRow As Long Dim maxRow_l As Long Dim strMat, lngNum With ActiveSheet maxRow = .Cells(Rows.Count, 2).End(xlUp).Row maxRow_l = 1 For i = 2 To maxRow flgFind = 0 For j = 1 To maxRow_l strMat = .Cells(i, 2).Value lngNum = .Cells(i, 3).Value If strMat = .Cells(j, 6).Value Then .Cells(j, 7).Value = .Cells(j, 7).Value + lngNum flgFind = 1 Exit For End If Next j If flgFind = 0 Then .Cells(j, 6).Value = strMat .Cells(j, 7).Value = lngNum maxRow_l = maxRow_l + 1 End If Next i End With End Sub
提示したコードは、左側のリストにある品目の値が、右側の出力リストにあるかどうかをループで探し、対象の品目が右側のリストにあった場合は在庫数を加算する、という動作をします。
では、このコードをDictionaryオブジェクトを使ったコードに置き換えて行きましょう!
Dictionaryオブジェクトでの処理順序はこんな感じです。
- Dictionaryオブジェクトにキーと要素を追加する
- 対象のレコードがDictionaryオブジェクトに存在するかをチェックする
- Dictionaryオブジェクトに存在するキーと要素を使った値の処理
このステップに沿って、Dictionaryオブジェクトのメソッドやプロパティをご紹介していき、最終的には上で提示したコードをDictionaryオブジェクトを使ったコードに置き換える、というのがゴールです。
ということで、今回は1.Dictionaryオブジェクトにキーと要素を追加する方法についてご紹介します。
AddメソッドでDictionaryオブジェクトにキーと要素を追加する
まずは、Dictionaryオブジェクトにキーと要素を追加する方法です。
これには、DictionaryオブジェクトのAddメソッドを使います。
記述方法はこちら。
Addメソッドでコードを置き換えてみる
実際に上のリストの値を使ったコードにすると、こんな感じになります。
Sub Dictionary_Example() Dim dic as Dictionary 'Dictionaryオブジェクトの宣言 Set dic = New Dictionary dic.Add "鉛筆", 36 End sub
Addメソッドの部分に直接値を指定していますが、セル指定でも可能です。
その場合、
dic.Add "鉛筆", 36
の部分を
dic.Add ActiveSheet.Cells(j, 2).Value, ActiveSheet.Cells(j, 3).Value
とすればOK。
Dinctionaryオブジェクトのプロパティ
さて、Dictionaryオブジェクトに値が追加できているかどうか、確認してみましょう。
Dictionaryオブジェクトに追加されたキーの要素を取得するには、Itemプロパティを使います。
Itemプロパティ
Itemプロパティは、Dictionaryオブジェクトの、キーに対する要素の値を取得したりするプロパティです。
記述方法はこちら。
このプロパティを使って、先ほどのコードでDictionraryオブジェクトにキーと要素が追加できているか見てみましょう。
先ほどのコードの後に、
最後に
今回は、AddメソッドでDictionaryオブジェクトにキーと要素を追加する方法をご紹介しました。
次回は、指定した値がDictionaryオブジェクトのキーに存在しているかどうか?をチェックしてくれる、Existsメソッドをご紹介していきます。
それでは、最後までお読みいただきありがとうございました!
連載目次:エクセルVBAのDictionaryオブジェクトでリストの重複を排除する
エクセルVBAでリストの重複を排除する方法として、Dictionaryオブジェクトを使った重複排除の方法をご紹介しています。