VBAに関して質問です。

VBAに関して質問です。 次のようなコードがあるのですが、X()の部分はどのように理解すればよいでしょうか Sub range2() X = range("A1:C13") MsgBox X(1, 3) End Sub Xはrangeの値を格納しているので(1,3)という指定の仕方には違和感があります。 Sub range2() Dim X As Variant Set X = range("A1:C13") MsgBox X.Cells(1, 3) End Sub のようなものなのでしょうか?

Visual Basic17閲覧xmlns="http://www.w3.org/2000/svg">25

ベストアンサー

0

上について >Xはrangeの値を格納しているので は正しいですが、正確には >Xはrangeの値のみを配列にして格納しているので になります。 この時のXはVariantの配列になるので、配列の値のXから要素を読む時はX(1,3)などと読み出して何の不思議もありません。 下について >のようなものなのでしょうか? 違います。 XがVariantの時 Set X = range("A1:C13") とされると、Variant型のXは右辺に合わせた型になろうとします。 「Set」とあるので、上とは違い、何らかのオブジェクトになります。 (オブジェクトになれなければエラーになります) 右辺がRangeオブジェクトなので、XはRangeオブジェクトになります。 2つのプログラムのXの最終的な型を表示します。 (一応上にも「Dim X As Variant」を追加しました) Sub range2上() Dim X As Variant X = Range("A1:C13") MsgBox X(1, 3) MsgBox TypeName(X) 'Variant()になる End Sub Sub range2下() Dim X As Variant Set X = Range("A1:C13") MsgBox X.Cells(1, 3) MsgBox TypeName(X) 'Rangeになる End Sub

ThanksImg質問者からのお礼コメント

Xが配列になるということが理解できていませんでした! ありがとうございます!

お礼日時:9/9 16:04

その他の回答(3件)

0

Set X = Range("A1:C13") ↑13階、部屋数3つのマンションだと思ってください。 MsgBox X.Cells(1, 3) ↑1階の3番目の部屋です。 MsgBox X.Cells(1, 3).Address ↑$C$1 が表示されます。

RangeにRangeを接続すると、相対参照できます。 MsgBox Range("B2").Range("C5").Address $D$6が表示されます。 B2がA1だったとして、その場合のC5の位置はどこ?って事ですね。

0

Xは値じゃなくて、rangeオブジェクトへの参照じゃないですか? 値がほしいなら object.value など、値を取得するプロパティまで書かないと。 エクセルですよね? ※object.value のobjectは例えです。 rangeへの指定によっても単一の値か配列か変わるんじゃなかったかな。