6

範囲内のすべてのセルをループするコードを作成しようとしています。最終的にはもっと複雑なことをしたいのですが、うまくいかなかったので、いくつかの短いテスト プログラムを作成することにしました。最初の例は正常に動作しますが、2 番目の (名前付き範囲を使用した) は動作しません (「Object_Global のメソッド範囲に失敗しました」というエラー メッセージが表示されます)。私が間違っていることについてのアイデアはありますか?名前付き範囲でこれをやりたいのですが...ありがとう!

作品:

Sub foreachtest()
Dim c As Range
For Each c In Range("A1:A3")
    MsgBox (c.Address)
Next
End Sub

動作しません:

Sub foreachtest2()
Dim c As Range    
Dim Rng As Range
Set Rng = Range("A1:A3")
For Each c In Range("Rng")
    MsgBox (c.Address)
Next
End Sub
4

3 に答える 3

9

Set Rng =Range("A1:A3") は、名前付き範囲ではなく、範囲オブジェクトを作成しています。これはうまくいくはずです

Sub foreachtest2()
Dim c As Range    
Dim Rng As Range
Set Rng = Range("A1:A3")
For Each c In rng
    MsgBox (c.Address)
Next
End Sub

Rng という名前の範囲を作成する場合は、

Range("A1:A3).Name="Rng"

それを作成するか、このように作成してループすることができます

Dim c As Range
Range("a1:a3").Name = "rng"
For Each c In Names("rng").RefersToRange
MsgBox c.Address
Next c
于 2012-10-23T21:47:16.813 に答える
7

2 番目のコードを調整するには、範囲 rng が範囲を表す変数であることを認識し、そのように扱う必要があります。

Sub foreachtest2() 
Dim c As Range     
Dim Rng As Range 
Set Rng = Range("A1:A3") 
For Each c In rng
    MsgBox (c.Address) 
Next 
End Sub 

警告: ほとんどの場合、範囲内でのループを回避できれば、コードは高速になります。

于 2012-10-23T21:47:47.307 に答える
7

代わりにこれを試してください:

Sub foreachtest2()
Dim c As Range
Range("A1:A3").Name = "Rng"
For Each c In Range("Rng")
    MsgBox (c.Address)
Next
End Sub
于 2012-10-23T21:39:45.933 に答える