一回も披露したことのない豆知識

VBAを使っていて、
配列数を変数で定義したいのですが、
ネットで検索すると


Dim aaaa() as integer
Redim aaa(xxx, yyy)

あるいは
Dim aaaa()
Redim aaa(xxx, yyy) as integer

のようにdimで変数を定義した後にredimで定義しなおす方法が書かれてあります。



一方で、

Redim aaa(xxx, yyy) as integer

のように、dimの定義を省略して、いきなりredimで配列を定義しても
問題なくプログラムは実行できることに気がついたのですが
これら二つの方法に違いはあるのでしょうか?

後者を使っても問題ないでしょうか?

A 回答 (1件)

ReDimのヘルプより



メモ 宣言した変数がモジュール レベルまたはプロシージャ レベルにない場合、
ReDim ステートメントは宣言ステートメントと同様の働きをします。同じ名前を
持つほかの変数が後で作成されると、その変数の適用範囲 (スコープ) が広く、
Option Explicit ステートメントが指定されている場合でも、
ReDim ステートメントは後で作成された変数を参照し、コンパイル エラーは発生しません。
このような名前の競合を避けるには、ReDim ステートメントは宣言ステートメント
として使わず、配列を再定義するためだけに使用します。

と、ありますので宣言なしでRedimはしない方がいいでしょうね。
バグの温床になりそうな気配です。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報