宣言と同時に値の入力ができない
一般的なプログラミング言語では型宣言と値代入が同時にできます。以下はC言語の例。
int i=0;
' エラー' Dim i As Integer = 1 ' なぜかConstはOK' Const i As Integer = 1
for文中に宣言できない
プログラミングしている人ならわかると思うけど、「やり捨てポイ変数」ってどうしてもあるわけです(言葉が悪くてすみません..)。典型的なものとしてforループで使う変数です。
以下のようにC言語やJava(C#も)、変数iはfor分内で使うのみでforループから外れたら不要になります。
for(int i=0; i>5; i++)
' エラー' For Dim i As Integer=0 to 4 ' 正しい' Dim i As Integer For i=0 to 4
スコープが雑
CやJavaなどではスコープ(変数の有効範囲)が細かくて、{ }内で宣言した変数は{ }内のみで有効なんです。以下のようにif外の変数iとif内の変数iは別物です。
int i=1; if(...){ char i='a'; } printf(i); //出力1
VBAだとスコープがプロシージャ内という雑な範囲なのでうまく行きません。
Dim i As Integer i=1 IF ... Then i="a" 'エラー' EndIF
これが型宣言をしない直接的な原因にはならないとは思いますが、狭いスコープ内でちょっとだけ変数を使いたい時なんかに前後関係を気にしなきゃいけないという点はストレスになりますね。
VBA以外のスクリプト言語はそんなにうるさくないぞ
VBAはスクリプト言語の範疇かと思いますが、一般的にスクリプト言語ではあまり型宣言に対してうるさく言われないんですよね。PyrthonにしろPHPにしろ。少なくともこの2つの言語のプログラム例で型宣言しているケースは見たことないです。Javascriptだと宣言しているケースが多いけどほとんどがvarやletで宣言していますね。VBAのVariantみたいなもんでやはり風潮として緩いです。
そんなスクリプト言語の一般的な風潮を考えると、VBAで型宣言しないユーザーはいてもおかしくないなって気はします。
じゃあ僕はどうしているのか?
じゃあ僕自信はどうなのかって言うと、自分だけが使うちょっとしたプロラムは型宣言しません。一方で複数人が使うそこそこ大きいプログラムの場合は型宣言するようにしています。
これは速度面で型宣言した方が有利だからです。
ちなみに、前者ではセル参照で.Valueすら入れません。後者は入れるしSheets("Sheet1")とシートも指定します。複数人が使うケースでは誤動作の元ですからね。最近はWorkbooksまで記述しています。Excelファイルが複数開いている状態ではこれを入れた方が速いみたいです。
まあ、僕的には型宣言しない人たちの気持ちはわかりますね。