カテゴリー
Microsoft

【Excel VBA】重複しないリスト作成や、要素が 1 種類のみかどうかを判定するコード!

重複なしのリストは、VBA の辞書オブジェクトの Key を使用することで実現可能ですの!

今回はそのコードを書くときに使えるテクニックですわ♪

応用すれば、要素が 1 種類のみかどうかを判定するチェックにも使ますわね。

ポイント

  • objDictionary.Add Key:=keyValue, item:=itemValue という形だと、Key が重複した場合に実行時エラーとなる。
    「実行時エラー ‘457’ このキーは既にこのコレクションの要素に割り当てられています。」
  • このエラーを避けるには、objDictionary.Exists(keyValue) で重複チェックが必要。
  • objDictionary(keyValue) = itemValue と書けば、既存のキーであっても上書きするのでエラーとならない。

VBA コード例

Public Sub Test()
  Dim objNoDuplicateList As Object
  Set objNoDuplicateList = CreateObject("Scripting.Dictionary")

  ' ディクショナリに追加
  ' 重複排除が目的のため、item ではなく、Key に追加
  objNoDuplicateList("い") = Null
  objNoDuplicateList("い") = Null
  objNoDuplicateList("い") = Null
  objNoDuplicateList("ろ") = Null
  objNoDuplicateList("は") = Null

  ' 重複が自動的に取り除かれたリストの内容を表示
  Dim v As Variant
  For Each v In objNoDuplicateList
    Debug.Print v
  Next v

  ' 要素数をカウントすれば、1種類のみの値が入力されていたかどうかのチェックも可能
  If objNoDuplicateList.Count > 1 Then
    Debug.Print "リストに複数の値あり!"
  Else
    Debug.Print "リストには1種類の値のみ!"
  End If
End Sub

おわりに

このページのに、実行時エラーが発生すること、そして避ける方法が存在し、具体例を示さされておりました♪ありがとう存じます!

また、辞書オブジェクトについてのドキュメントは次のページとなります。

以上です。

コメントを残す