変数宣言

Dim 変数名 As 型名
例えば
Dim a As String
という風に書く。
型名は省略できて
Dim a
と書ける。この場合は型名Variantが省略されたとみなされる。
この型名の省略による“Variantみなしルール”は言語仕様上問題レベルであり、注意が必要です。
例えば
Dim a,b As Integer
と書いてもエラーにはなりません。

一般常識では
Dim a As Integer,b As Integer
と解釈がされるものと勘違いしがちですが、VBAでは
Dim a As Variant,b As Integer
と解釈されてしまいます。両方Integerにしたければきちんと
Dim a As Integer,b As Integer
と書く必要があります。

さて、ここからは蛇足です。
このDimというのは“実行される”ものではなく、“あれば良い”というおかしなものなのです。
言っている意味が分からないと思いますので実例を挙げます。

If 0 Then
Dim a
Endif
a=30
こんな風に書いてもエラーにはなりません。
If 0 Then なので次の行は実行されないのですが、Dim aはキチンと有効になっているのです。
もちろん変数を宣言しないとエラーになるよう設定をしています。
例えばGoto文でまったく通らないところに置いても有効ですし、逆にGoto文で先に実行するように見えるところに置いても、変数を使うところより後ろの行にあるとエラーになってしまいます。
つまり実行される順番などは関係なく、プログラムの行として変数が使われるところより前でDimを書かないといけません。
「Dimはプログラムを実行する前に評価されるから」と言えるでしょう。

一方でDimの親戚に見えるRedimというのもあります。
これは“実行が必要な”文です。
「Redimはプログラムを実行する時に評価する」と言えます。

-