DictionaryのExistsが動作しない
最近、VBA開発でハマったケースです。
VBAでDictionaryを使用した際、Existsが動作しませんでした。
VBAでDictionaryを使用した際、Existsが動作しませんでした。
■現象
・セルの値をDictionaryオブジェクトにキーをAddしたい。
・Existsでキーが存在しているか調べるとFalseが返ってくる。
・セルの値ではなく、キーを直で入力するとTrueが返ってくる。
=セル代入がうまくいってない。
・セルの値をDictionaryオブジェクトにキーをAddしたい。
・Existsでキーが存在しているか調べるとFalseが返ってくる。
・セルの値ではなく、キーを直で入力するとTrueが返ってくる。
=セル代入がうまくいってない。
ValueではなくRangeが代入されているのが原因
この記事を書いてから、.Valueを付けないような運用をしていたのが原因でした。
.Valueは必要?不必要?省略しても良い?【ExcelVBA】
Valueを付けなかったため、値(Value)ではなく、Rangeオブジェクトで代入したのが原因です。
Dictionaryは数字、文字列以外にもRangeも代入が可能です。
正常に取得できないサンプルコード
'参照設定 Microsoft Scripting Runtime Public Sub sample() Dim dic As Dictionary Set dic = New Dictionary '■サンプルデータを代入 Cells(1, 1) = "Excel" Cells(2, 1) = "Access" '■Dictionaryに格納 dic.Add Cells(1, 1), 1 'Excel dic.Add Cells(2, 1).Value, 1 'Access dic.Add "Python", 1 'Access '■Existsで存在するかどうかチェック Debug.Print dic.Exists("Excel") 'False Debug.Print dic.Exists("Access") 'True Debug.Print dic.Exists("Python") 'True '■結果 'dic.Add Cells(1, 1), 1 の場合は Rangeで代入されたため、文字列でチェックしてもFalseとなる 'dic.Add Cells(2, 1).Value, 1の場合は Valueで代入されたため、文字列でチェックしたらTrue となる End Sub
関連記事
配列内の重複した要素を削除する【Dictionary】【ExcelVBA】
.Valueは必要?不必要?省略しても良い?【ExcelVBA】
コメント