処理スピードの面からも適切な変数の型宣言を行うべきであり、これはループカウンタ変数についても同様である。VBAの言語仕様というのは非常に優しくできていて、コードの中で使用する変数や定数は取りたててデータ型を気にしなくても宣言さえしておけばエラーとはなりません。i」のように型指定なしに宣言された変数は自動的に"なんでもOK"のバリアント型(Variant)にしてくれますので、上のコードのようにいきなり小数を代入しても、大きな値を代入しても実行時でさえエラーとなりません。Integer」とすると、整数型(Integer)に小数を代入したり、その範囲(-32,768〜32,767)を越える値を代入した時点で実行時エラーとなります。j」の宣言行でさえ無くても、コンパイルおよび実行時ともにエラーなく動作してしまいます。※ただし変数の宣言が面倒だからとこれを消してしまうのは"絶対"にやめましょう!。変数名のスペルミスでさえ許してくれるので後でとんでもないことになりかねません。このように大変"親切"(言い方を換えればかなり"ラフ")なVBAですが、それに甘んじて書かれたコードはそれなりにデメリットも被らなければなりません。次の表をご覧ください。これはそれぞれのデータ型の変数1つがどれくらいのメモリ領域を使っているかを示したものです。範囲の値しかとらないデータに対してバリアント型の変数を割り当てたとしたら、15バイトも余分にメモリを消費することになります。バリアント型となるしかしこの型宣言の問題はそれだけではないようです。して扱われていればそれだけで処理のパフォーマンスが落ちてしまいます。いえ、それが実際にどの程度処理時間に影響を与えるのか、現実的な値は確認したことがありません。そこでここでは、変数の型宣言をした場合とそうでない場合、言い方を換えれば、そのデータ値に適した型宣言をした場合とバリアント型として使う場合とで処理時間の比較を行ってみたいと思います。テストとして次のようなコードを実行して、その処理時間を測定してみます。参考までに、ループで囲まれた代入式の部分をすべて削除し、単純にループを5000×5000回処理するだけの時間も測定してみました。"テスト6"そして、テスト結果はつぎのようなものになりました。時間の単位は"秒"です。16.0910.55テスト6通貨型14.507.61やはり、バリアント型というのは遅い!ということが確認できました。おおむねメモリ領域のサイズが大きくなると処理時間も大きくなっているようです。変数の型宣言をしていない場合には暗黙的にバリアント型になってしまいますので、処理スピードの面からもやはり適切な変数の型宣言を行うべきであるといえます。この結果の中で、特にコーディングする際に注意しなければいけないと感じたのは、代入式を除いたループだけの実行結果です。ここでの代入式の左辺にある変数は、実際の処理ではそれぞれ何らかの意味を持っているはずですから、そのデータがもし小数点を扱う場合であれば浮動小数点数型(SingleまたはDouble)を使わざるを得ないわけですが、ループのカウンタとして使う変数についてはふだん軽く考えがちではないでしょうか?。ところがこの結果を見ると、ループのカウンタ変数の型宣言もいかに処理時間に大きな影響を与えるかが判ると思います。ループ処理の内容によっては浮動小数点数型を使う必要がある場合もあるでしょうが、ループカウンタ変数もきちんと型宣言をすべきという結論になると思います。