VBA ディクショナリの闇:値がないAdd分はキーが登録されない罠

VBAのディクショナリではまりました。

ディクショナリにキーと値を組み込んでいき、それを処理する際に、ディクショナリをなめるつもりで、

For i = 0 to dic.count
      '処理を書く
Next

と書いていましたが、どうも処理が思ったより少ない数しか回っていないようです。

ディクショナリ生成までもどって確認していましたが、ディクショナリに登録されている数が、やはり想定より少ない。

はじめなぜ少ないのかがわからなかったのですが、どうやらキーに値があっても、ディクショナリに格納しようとする値がnullだと、そのキーの値がnullになるのではなく、キーそのものが登録されないようです。

そのため、思ったよりディクショナリに登録されている数がすくなくはまりました。

脱出方法としては、値を利用するループをディクショナリの数ではなく、当初考えていたキー相当の配列で回してやるといい感じです(登録されなていないキーは.Existsでパスする)

(注意)まちがっても、そこでdic.keysで回してはいけません。dic.keysにも値がなかったキーは入っていません

なんともなんとも。今日もまたハマるの巻きw

この記事が気に入ったらサポートをしてみませんか?