循环通过单元格并添加到范围

我如何循环通过单元格B1到J1,并将它们添加到一个范围,如果他们符合一定的标准。 例如。

Dim Range1 As Range For i = 1 to 9 If Range("A1").Offset(1,i) meets a certain criteria Then **Add that cell to Range1** End If Next i 

我不知道如何处理将某些单元格添加到Range1的部分。

谢谢您的帮助!

像这样使用Union来粘合你的范围

  1. 请注意, For each循环比一个For i = 1 to x方法更快
  2. 您可以使用SpecialCells立即确定您的新范围(例如任何空白,任何错误,任何公式等)

     Sub Test() Dim rng1 As Range Dim rng2 As Range Dim c As Range Set rng1 = Range("B1:J1") For Each c In rng1 ' Add cells to rng2 if they exceed 10 If c.Value > 10 Then If Not rng2 Is Nothing Then ' Add the 2nd, 3rd, 4th etc cell to our new range, rng2 ' this is the most common outcome so place it first in the IF test (faster coding) Set rng2 = Union(rng2, c) Else ' the first valid cell becomes rng2 Set rng2 = c End If End If Next End Sub 

当我不想向代码片添加代码时,我在即时模式下使用这种方法。

 strX="": _ For Each cllX in Range( ActiveCell, Cells( Cells.SpecialCells(xlCellTypeLastCell ).Row, ActiveCell.Column) ): _ strX=strX & iif(cllX.text="","",iif(strX="","",",")& cllX.address): _ Next: _ Range(strX).Select 

但是,虽然这是直观的,它只适用于多达35至50个单元格。 之后,VBA返回错误1004。

 Run-time error '1004': Application-defined or object-defined error 

使用联合function更强大。

 Set rngX=ActiveCell: _ For Each cllX in Range( ActiveCell, Cells( cells.SpecialCells(xlCellTypeLastCell ).Row, ActiveCell.Column) ): _ Set rngX=iif( cllX.text="", rngX, Union(rngX, cllX) ): _ Next: _ rngX.Select 

它很短而直观,每次使用后我都会把它扔掉。