2012-10-23 14 views
5

範囲内のすべてのセルをループするコードを作成しようとしています。最終的に私はもっと複雑なことをやりたいのですが、問題があって短期間のテストプログラムを作ることに決めました。最初の例はうまくいきますが、名前付き範囲を持つ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

この2番目の例では、正確には何をしようとしていません。あなたは実際に "Rng"と呼ばれる範囲を持っていますか? –

答えて

6

のようにそれを作成し、ループすることができ、その後RNGと呼ばれます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 

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

4

ではなく、これを試してみてください:

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

それは完璧に働いた、ありがとう! –

+0

@ChristiFrench素晴らしい - うまくいきました!私の回答を「回答済み」とすることを忘れないでください。ありがとう。 – David

6

設定RNG =範囲( "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 

を動作するはず

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

それを作成するか、あなたを調整するにはthsi

Dim c As Range 
Range("a1:a3").Name = "rng" 
For Each c In Names("rng").RefersToRange 
MsgBox c.Address 
Next c 
関連する問題