Excel VBAの勘違いしていた作法
少し前のことも含め、それまで大いに勘違いしていたExcel VBAの作法の一部を書き出してみます。
⑴ 変数宣言
例えば、まとめてDouble宣言したつもりで
Dim A, B, C As Double
と宣言すると、C以外はVariantになる。
⑵ 配列宣言
Cなどでは配列宣言で
A(10)
とすると、10は配列の要素数で、配列のインデックスは0~9となるが、VBAで同じ宣言をすると10は最大インデックスを意味する。
従って、Aの要素数は0~10までの計11個となる。
⑶ プロシージャや関数の引数定義
例えば、まとめて値渡しさせるつもりで
Sub abc (ByVal A as Double, B as Double, C as Long)
と定義すると、A以外は参照渡し(ByRefで定義されたもの)となる。
(VBAでは参照渡しがデフォルトになっている)
まだまだありますが、これまで原因不明のバグの真の原因が上記のことだったことが少なからずありました。
またやってしまうかもしれませんが。。。