2016-11-30 3 views
0

私はこれを数回実行しました。私はそれを回避することができますが、私はそれが理由や簡単な回避策があるかどうかを判断しようとしています。range.columns(n)で定義した後に範囲をループすることができません

私は今、私は、その範囲の最初の列に各セルを見てみたい、と私はこれをやろうとしている

Set rngAll = range("A8",cells(usedrange.rows.count,usedrange.columns.count)) 

と私のすべてのデータが含まれている範囲を定義しました:

Set rngUserIDs = rngAll.columns(1) 
For each rngCell in rngUserIDs 
    Do Something 
next rngCell 

I代わりrngUserIDsの全体と一致するように自身を設定rngCellrngUserIDsにおける個々のセル、見てのコードを実行します。 rngUserIDs = A8:A1000の場合は、A8からループバックする代わりに、rngCell = A8:A1000となり、何かをしてからループを終了します。

set rngUserIDs = Range("A8","A" & range("A" & rows.count).end(xlup).row) 
For Each rngCell in rngUserIDs 
    Do Something 
next rngCell 

それは順番に各セルを見て、完璧に動作します:

は私のような、rngUserIDs、他の方法を設定した場合。

この現象が発生する理由はありますか?私はそれについて何かできることはありますか?はい、私はそれを回避することができますが、私はrngAllの最初の列を使うことができれば、さまざまな構造上の理由から便利です。

答えて

1

Cellsプロパティを指定する必要があるため、可能な限り範囲を制限したいので、最後のオプションが最適であるとは思っていませんでした。

Set rngUserIDs = rngAll.columns(1) 
For each rngCell in rngUserIDs.Cells 
    Do Something 
next rngCell 
+0

私がループでやっていることの1つは、その列の空白のセルを探していることです。データの終わりに空白がある可能性があるので、他の列にデータが残っている間に、その列で '.end(xlup)'を使用すると誤った結果になる可能性があります。 – Werrf

+0

Findを使用して、最後に使用された行を任意の列で検索し、コードをその縮小範囲に制限することができます。 – SJR

関連する問題