2016-09-06 25 views
3

私はどこからでも検索しましたが、範囲変数が割り当てられた範囲外のセルを参照できる理由を理解できませんでした。Excel 2007 VBA範囲変数参照範囲外のセル

例えば、私は以下のコード書いた場合:

Dim Rate as Range 
Set Rate = Range("A1:A5") 

For Each Cell In Rate 
     Debug.Print Cell.Value 
Next Cell 

Range("H6").Value = Rate(6).Value 
Range("H7").Value = Rate(7).Value 

を上記のルーチンは、唯一の「A1:A5」の5つの値をプリントアウトします - しかし、最後の2文は、A6」の値を引き起こします「A7」を「H6」と「H7」に格納する。

変数「レート」は「A1:A5」にのみ割り当てられているため、列Aの他のセル(「A6」&「A7」)を参照できるのはなぜですか?

何か間違っていますか?どんな洞察力も大いにありがとう!

+0

おかげSlai。しかし、エラーをどのように取得するか明確にすることはできますか?私はあなたが "= Rate.Value2(7)"の意味を分かりません。 – Dionysus17

答えて

1

何も問題ありません。私は個人的にこの "機能"が好きです。あなたはむしろエラーが出た場合Rate.Value2が5による1バリアント配列を与えるため
は、その後、あなたは

Range("H6").Value = Rate.Value2(6, 1) ' .Value2 because .Value(6, 1) 

ようなものを使用することができます。またはその代わりに範囲.Value配列を使用する:あなたのケースRate(6)

Dim Rate ' as Variant 
Rate = Range("A1:A5").Value ' Variant/Variant(1 To 5, 1 To 1) 

Debug.Print Rate(5, 1) ' ok 
Debug.Print Rate(6, 1) ' Run-time error '9': Subscript out of range 

または

Dim Rate as Variant 
Rate = Application.Transpose(Range("A1:A5")) ' Variant/Variant(1 To 5) 

Debug.Print Rate(5) ' ok 
Debug.Print Rate(6) ' Run-time error '9': Subscript out of range 

.Offsetに似て Rate.Cells(6, 1)の略です。たとえば:

Debug.Print Range("C3:D4")(1, 1).Address ' prints "$C$3" 
Debug.Print Range("C3:D4")(-1, -1).Address ' prints "$A$1" 

私はレンジでエラーになって考えることができる唯一の方法は、代わりにエリアを使用することです:

Dim Rate As Areas 
Set Rate = Range("a1,a2,a3,a4,a5").Areas 

Debug.Print Rate(5) ' ok 
Debug.Print Rate(6) ' Run-time error '9': Subscript out of range 
+0

あなたのコードにいくつかの問題があります:まず、 'Next cell'ではなく、' Next cell'でなければなりません。 'Rate'は常に** 2D **配列になるので、' Rate(n) 'に渡す' n'の値はすべて失敗します。 – Rory

+0

ありがとう@Rory私はいつものようにうんざりでした – Slai

+0

@Slai Variant変数がこの点でRange変数とどのように違うかを知るのに非常に便利です。だから、範囲変数の範囲外(Variant変数と同様)にエラーが発生するようなRange変数を引き起こす方法はありますか? – Dionysus17

関連する問題