Excel VBAで型が一致しない時の対処法

  • このエントリーをはてなブックマークに追加
スポンサードリンク

VBAで型が一致しないバグの理由が分からなかったとこありませんか?私がこれまで経験したイージーミスから、「型定義しているのになんで?」までをケースごとに解説していきたいと思います。

ケース1:数字での型が一致しない場合

理由

これはExcelのセルを使う時によくやってしまうミスの一つ。しかも、動く時と動かない時があるやつですね。Excelの行は最大1048576行まで取れます。Integerは32767までしか値を保持できません。

対策

Excelのセルを使う時は必ずLongで選択しましょう。

ケース2:Variantによる自動選択による型不一致

理由

Variantは便利な変数である反面、メソッドを使用する時は最大限気を付ける必要があります。「Sheets(e & "明細").Select」がうまく動いているから、「Sheets(e).Select」が、「e」のセルの中の文字列に変換してくれていると思い込んでいるバターンです。「& "明細"」があるとVBAは「e」が文字列であることを判断できます。しかし、「Sheets(e)」だけでは、「e」がRange型として判断してしまいます。

対策

Sheets(e.value)を記載すればうまく動きます。いずれにせよ、このようなことがありますので、Variant型はあまり使わないほうがいいと思います。

ケース3:変数宣言による型不一致

理由

「Dim SHT1, SHT2 As Worksheet」は、SHT2しか「Worksheet型」でしか反映されてません。SHT1はVariant設定になってしまっているという罠です。

対策

「Dim SHT1 As Worksheet, Dim SHT2 As Worksheet」と分けて記載すれば解決します。

 

あとがき

いかがでしたでしょうか?皆さんのお役に立てれば幸いです。PCが一般化してきた今、他人と差別化を図る一つの手段として、VBAを学んでいくのも一つの手段です。一人で学んでいくのが難しいと思われている方は、ストアカ を利用してみてはいかがでしょうか?

  • このエントリーをはてなブックマークに追加