プロが教えるわが家の防犯対策術!

Dim myVar As Variant
myVar=Range("A1:A10")
などのようにセル範囲を変数に一気に入力して使う際、myVarは2次元配列になる筈です。セル数が1個だけの時は、ひょっとしてただの変数つまり配列にならないのですか?確信ありませんが、そう思えるエラーがありました。

気のせいならこのまま粛々とエラー対策を続けます。本当だったら、データ数で変数の型が変わるので都合が悪いです。どう対策すればいいですか?

A 回答 (1件)

セルひとつだと配列を返さないので、配列にしたいなら自分で作る必要があります。


タイトル行などの余計なセルも読み込むことで「必ず範囲になるようにする」という手もありますが、データ数0なんて場合もありますし、そのへんはチェックして処理を変えた方がスマートです。
例)
 if Range("A1:A1").count = 1 Then
  Redim MyVar(1 to 1, 1 to 1)
  MyVar(1, 1) = Range("A1:A1")
 Else
  MyVar = Range("A1:A1")
 End if


> 確信ありませんが、そう思えるエラーがありました
エディタに「ローカルウィンドウ」という便利な機能があります。メニューの「表示」から有効にしてください。ブレイクポイントやStopなどで実行を止めると、その時点での変数の中身を覗くことができ、デバッグしやすくなる=確信を持てるようになると思います。
VBAの開発効率がいいと言われる理由のひとつです。ステップ実行などと合わせて、ぜひ使ってみてください。

変数にオブジェクトをSetすれば、オブジェクトの「プロパティ」も確認できます。
 Set o = Range("A1")
 Stop
    • good
    • 0
この回答へのお礼

ありがとうございます。
少しですが、複雑になりますね。for-nextにしようかと思います。

お礼日時:2015/01/10 19:45

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