Excel VBAの条件式で発生していた型のエラーの原因を特定した

はじめに
こちらのサイトで問題を解こうとしたところ、作成途中のVBAで「型が一致しない」というエラーが発生した。
この記事では、今回発生したエラーの説明と、型とは何か、型をチェックする方法などについて書いていく。
Excel VBAは、今後プログラマーとしてキャリアを切り開いていくために、武器にしていきたい。
もちろん、VBAだけ出来るだけでは市場価値は高まらないと思う。
しかし、VBAの記事を書き続けることで、自信を付けて、弾みをつけたい。
そんな思いで、この記事を書いていく。
コードを実行するとエラーが発生した
こちらのコードを実行すると、「型が一致しません。」とのエラーが出た。

デバッグを押すと、以下の黄色の箇所に問題があることが分かった。

おそらく、Range(“E8:E12”) と 2018/10/31の型が合っていない。
型とは
Excel VBAにおける型とは、何なのだろうか?
こちらのサイトによると、以下のような型が存在する。
- 整数型(Integer)
- 長整数型(Long)
- 通貨型(Currency)
- 単精度浮動小数点数型(Single)
- 倍精度浮動小数点数型(Double)
- 文字列型(String)
- 日付型(Date)
- ブール型(Boolean)
- オブジェクト型(Object)
- バリアント型(Variant)
先ほどのエラーの原因は、「Range(“E8:E12”)がオブジェクト型で、2018/10/31が文字列型であること」と考えられる。
型チェックする方法
それでは、Excel VBAで型をチェックするには、どうすればいいのだろうか?
こちらのサイトによると、TypeNameを使用するらしい。
Debug.Printの使い方
Debug.Printを使うと、出力結果を確認することができる。
こちらのサイトによると、イミディエイトウィンドウという場所に、返り値を出力するらしい。
イミディエイトウインドウはどこから開けるのか?
VBAの下の方に色々なウインドウ(ローカル、ウォッチ)が表示されていたが、ばつ印をクリックすると、イミディエイトウインドウが出てきた。

試しに、以下の処理を書いていたので、Integerが出力されていた。

Debug.Printの後に書いたものが、イミディエイトウインドウに表示される。
イミディエイトウインドウを開く方法
こちらのサイトでは、Control + Gを押せば、イミディエイトウインドウが表示されると書いてある。
しかし、macを使用しているので、この方法では開くことが出来なかった。
上部のメニューから、表示を選択し、イミディエイト ウインドウを選択すると開くことができる。

「^ ⌘ G」のショートカットでも開くことができる。
「^」は「Control」のことだ。
「⌘」は「Command」のこと。
Range(“E8:E12”)の型を調べる
以下のように、TypeNameしたものを、Debug.Printでイミディエイトウインドウに表示させよう。

実行すると、Rangeと表示された。

2018/10/31の型を調べる
今度は、2018/10/31を見ていこう。

実行すると、Stringと表示された。

型のエラーが発生していた原因
再び、以下のエラーが発生していた原因を探ろう。

条件式の左辺のRange(“E8:E12”)がRangeであるのに対し、右辺の2018/10/31がStringであり、型が一致していないというのが原因と考えられる。

コメントを残す