皆様こんにちは、ノグチです。
前回の記事から、複数のループを使って処理していた、リストの重複排除を、下記3ステップでDictionaryオブジェクトを使ったコードに置き換えていく方法をご紹介しています。
- Dictionaryオブジェクトにキーと要素を追加する
- 対象のレコードがDictionaryオブジェクトに存在するかをチェックする
- Dictionaryオブジェクトに存在するキーと要素を使った値の処理
上記3ステップのうち、1.Dictionaryオブジェクトにキーと要素を追加するは、前回記事にてDictionaryオブジェクトのAddメソッドを使ってDictionaryオブジェクトにキーと要素を追加する方法としてご紹介しました。
今回はステップ2の、対象のレコードがDictionaryオブジェクトに存在するかをチェックするについてご紹介していきます。
要素が存在しているかを判定するExistsメソッド
対象レコードがDictionaryオブジェクトにすでに存在しているかどうかをチェックするには、DictionaryオブジェクトのExistsメソッドを使います。
Existメソッドは、指定した値がDictionaryオブジェクトに格納されているか?をチェックしてくれるメソッドです。
記述方法はこちら。
これで、Dictionaryに存在するかチェックしたいキーに指定した値が、すでにDictionaryオブジェクトに存在していればTrue、存在していなければFalseを返り値として返してくれます。
Existsメソッドの使用例
ではこのExistsメソッドを使って、指定したキーがDictionaryオブジェクトに存在しているかを判定し、存在しないときに要素を追加する処理を作成してみましょう。
前回記事でご紹介したDictionaryオブジェクトにキーと要素を追加するコードを元にします。
こちらです。
Sub Dictionary_Example() Dim dic As Dictionary 'Dictionaryオブジェクトの宣言 Set dic = New Dictionary dic.Add "鉛筆", 36 Debug.Print dic.Item("鉛筆") End Sub
Existsメソッドを使用した条件分岐
Existsメソッドの返り値はTrueかFalseです。
ですから、以下のようにIf文の中でExistsメソッドを使用して処理を分岐させることができます。
If dic.Exists("鉛筆") = True Then MsgBox "「鉛筆」は登録済みです。" End If
Dictionaryに存在していない場合にキーを追加する
この条件分岐を利用して、Dictionaryオブジェクトにキーが存在していないときだけ追加をするコードは以下のようになります。
Sub Dictionary_Example() Dim dic As Dictionary 'Dictionaryオブジェクトの宣言 Set dic = New Dictionary If dic.Exists("鉛筆") = False Then dic.Add "鉛筆", 36 Debug.Print dic.Item("鉛筆") Else MsgBox "鉛筆は登録済みです。" End If End Sub
これで、
- Existsメソッドで、「鉛筆」というキーがDictionaryオブジェクトに存在しているかチェック
- Existsメソッドの返り値がFalseだったら(=キーに存在していなかったら)、AddメソッドでDictionaryオブジェクトにキーを追加
という処理にできました。
同じ値が存在していたら = 重複があったら、Dictionaryオブジェクトには登録しない、つまり、重複が排除できるということですね。
最後に
今回は、DictionaryメソッドのExistsメソッドを使って、Dictionaryオブジェクトに指定した値がキーとして存在しているか?の重複チェックをする方法をご紹介しました。
ちなみに、Existsの最後にあるsは忘れないようにしてくださいね。
筆者はこの最後のsを入力しないというスペルミスにより、コンパイルが通らずに悩んだことがあります。
そもそもVBEの入力支援に頼ればこんなことにはならないで済んだんですがね…
次回は、複数のループを使ってリストの重複排除をしているコードを、Dictionaryオブジェクトと、前回、今回の記事でご紹介したメソッドを使ったコードに置き換えていきます。
それでは、最後までお読みいただきありがとうございました!
連載目次:エクセルVBAのDictionaryオブジェクトでリストの重複を排除する
エクセルVBAでリストの重複を排除する方法として、Dictionaryオブジェクトを使った重複排除の方法をご紹介しています。