【エクセルVBA】DictionaryオブジェクトのExistsメソッドで重複があるかを確認する方法


excel-vba-exists_eyecatch

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

前回の記事から、複数のループを使って処理していた、リストの重複排除を、下記3ステップでDictionaryオブジェクトを使ったコードに置き換えていく方法をご紹介しています。

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

上記3ステップのうち、1.Dictionaryオブジェクトにキーと要素を追加するは、前回記事にてDictionaryオブジェクトのAddメソッドを使ってDictionaryオブジェクトにキーと要素を追加する方法としてご紹介しました。

【エクセルVBA】AddメソッドでDictionaryオブジェクトにキーと要素を追加する方法
エクセルVBAのDictionaryオブジェクトを使った、リストの重複を排除する方法を連載でご紹介しています。今回は、Dictionaryオブジェクトにキーと要素を追加するAddメソッドのご紹介です。

今回はステップ2の、対象のレコードがDictionaryオブジェクトに存在するかをチェックするについてご紹介していきます。

スポンサーリンク

要素が存在しているかを判定するExistsメソッド

対象レコードがDictionaryオブジェクトにすでに存在しているかどうかをチェックするには、DictionaryオブジェクトのExistsメソッドを使います。

Existメソッドは、指定した値がDictionaryオブジェクトに格納されているか?をチェックしてくれるメソッドです。

記述方法はこちら。

Dictionaryオブジェクト.Exists (キー)

これで、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

これで、

  1. Existsメソッドで、「鉛筆」というキーがDictionaryオブジェクトに存在しているかチェック
  2. Existsメソッドの返り値がFalseだったら(=キーに存在していなかったら)、AddメソッドでDictionaryオブジェクトにキーを追加

という処理にできました。

同じ値が存在していたら = 重複があったら、Dictionaryオブジェクトには登録しない、つまり、重複が排除できるということですね。

最後に

今回は、DictionaryメソッドのExistsメソッドを使って、Dictionaryオブジェクトに指定した値がキーとして存在しているか?の重複チェックをする方法をご紹介しました。

ちなみに、Existsの最後にあるsは忘れないようにしてくださいね。

筆者はこの最後のsを入力しないというスペルミスにより、コンパイルが通らずに悩んだことがあります。

そもそもVBEの入力支援に頼ればこんなことにはならないで済んだんですがね…

次回は、複数のループを使ってリストの重複排除をしているコードを、Dictionaryオブジェクトと、前回、今回の記事でご紹介したメソッドを使ったコードに置き換えていきます。

【エクセルVBA】Dictionaryオブジェクトを使ったリストの重複排除プログラム
複数のループ文で書かれた重複排除処理のコードを、これまで複数回にわけでご紹介してきた、Dictionaryオブジェクトと各メソッド、プロパティを使ったコードに置き換えていきます。これなら複数ループでネストが深くなってしまったり、ゴチャゴチャしてしまうコードともオサラバ!...かも?

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

連載目次:エクセルVBAのDictionaryオブジェクトでリストの重複を排除する

エクセルVBAでリストの重複を排除する方法として、Dictionaryオブジェクトを使った重複排除の方法をご紹介しています。

  1. 【エクセルVBA】リスト処理に便利!Dictionaryオブジェクトをコードで使うための準備
  2. 【エクセルVBA】AddメソッドでDictionaryオブジェクトにキーと要素を追加する方法
  3. 【エクセルVBA】DictionaryオブジェクトのExistsメソッドで重複があるかを確認する方法
  4. 【エクセルVBA】Dictionaryオブジェクトを使ったリストの重複排除プログラム
  5. 【エクセルVBA】重複排除処理が速いのはどっち?Dictionaryオブジェクト vs 複数ループ
  6. 【エクセルVBA】Dictionaryに格納したキーと要素をリストに書き出す方法

タイトルとURLをコピーしました