循环遍历单元格并添加到范围

时间:2011-11-30 03:34:30

标签: excel vba excel-vba

如果它们满足某个条件,我将如何遍历单元格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的部分。

感谢您的帮助!

2 个答案:

答案 0 :(得分:25)

使用Union将你的范围粘合在一起

这样的东西
  1. 请注意,For each循环比For i = 1 to x方法
  2. 更快
  3. 您可以立即使用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
    

答案 1 :(得分:1)

当我不想在工作表中添加代码时,我在立即模式下使用此方法。

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

使用 Union 功能更加强大。

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

它非常简短直观,我每次使用后都会扔掉它。