Quantcast
Channel: いつも隣にITのお仕事
Viewing all articles
Browse latest Browse all 2094

【エクセルVBA】AddメソッドでDictionaryオブジェクトにキーと要素を追加する方法

$
0
0

excel,vba,dictionary,add,eyecatch

皆様こんにちは、ノグチです。

前回は、リスト処理にも便利に使える、Dictionaryオブジェクトをご紹介しました。

今回からは、Dictionaryオブジェクトのプロパティやメソッドを順にご紹介していきます。

そして最終的にはループで書かれた重複排除処理のコードを、Dictionaryオブジェクトを使った方法に置き換えていきましょう!

Dictionaryオブジェクトとは?や、宣言の方法は前回の記事でご紹介していますので、併せてご覧ください。

【エクセルVBA】リスト処理に便利!Dictionaryオブジェクトをコードで使うための準備
VBAでリストの重複を排除するのって、ループ文が複数出てきたり、処理速度が落ちたりして、ちょっと躊躇してしまいませんか?Dictionaryオブジェクトを使えば、重複排除もスマートにできるかもしれませんよ。エクセルVBAのDictionaryオブジェクトを、コードで使用するための前準備を紹介しています。

ループを使ったリストの重複排除処理のコード例

例えば、下のリスト。

excel,dictionary,add,リスト

B列の品目が同じレコードは在庫数を加算し、重複を取り除いてF、G列に出力したいとします。

上のリストの処理を、ループ文を複数使ったコードで表現するとこんな感じになります。

Sub TestList()
Dim i As Long
Dim j As Long
Dim flgFind As Long
Dim maxRow  As Long

With ActiveSheet

    maxRow = .Cells(Rows.Count, 2).End(xlUp).Row

    For i = 2 To maxRow
        flgFind = 0
        For j = 2 To .Cells(Rows.Count, 6).End(xlUp).Row
            If .Cells(i, 2).Value = .Cells(j, 6).Value Then
                .Cells(j, 7).Value = .Cells(j, 7).Value + .Cells(i, 3).Value
                flgFind = 1
                Exit For
            End If
        Next j
        
        If flgFind = 0 Then
            .Cells(j, 6).Value = .Cells(i, 2).Value
            .Cells(j, 7).Value = .Cells(i, 3).Value
        End If
    Next i
    
End With

End Sub

提示したコードは、左側のリストにある品目の値が、右側の出力リストにあるかどうかをループで探し、対象の品目が右側のリストにあった場合は在庫数を加算する、という動作をします。

では、このコードをDictionaryオブジェクトを使ったコードに置き換えて行きましょう!

Dictionaryオブジェクトでの処理順序はこんな感じです。

  1. Dictionaryオブジェクトにキーと要素を追加する
  2. 対象のレコードがDictionaryオブジェクトに存在するかをチェックする
  3. Dictionaryオブジェクトに存在するキーと要素を使った値の処理

このステップに沿って、Dictionaryオブジェクトのメソッドやプロパティをご紹介していき、最終的には上で提示したコードをDictionaryオブジェクトを使ったコードに置き換える、というのがゴールです。

ということで、今回は1.Dictionaryオブジェクトにキーと要素を追加する方法についてご紹介します。

AddメソッドでDictionaryオブジェクトにキーと要素を追加する

まずは、Dictionaryオブジェクトにキーと要素を追加する方法です。

これには、DictionaryオブジェクトのAddメソッドを使います。

記述方法はこちら。

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オブジェクトの、キーに対する要素の値を取得したりするプロパティです。

記述方法はこちら。

Dictionaryオブジェクト.Item (キー)
これで、指定したキーの要素の値を取得することができます。

このプロパティを使って、先ほどのコードでDictionraryオブジェクトにキーと要素が追加できているか見てみましょう。

先ほどのコードの後に、

Debug.Print dic.Item("鉛筆")

を追加して実行してみると…

Dictinary,Item,イミディエイト

この通り、「鉛筆」というキーに対して「36」という値が要素に追加されているのがわかりますね。

最後に

今回は、AddメソッドでDictionaryオブジェクトにキーと要素を追加する方法をご紹介しました。

次回は、指定した値がDictionaryオブジェクトのキーに存在しているかどうか?をチェックしてくれる、Existsメソッドをご紹介していきます。

それでは、最後までお読みいただきありがとうございました!


Viewing all articles
Browse latest Browse all 2094

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>