如果它们满足某个条件,我将如何遍历单元格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的部分。
感谢您的帮助!
答案 0 :(得分:25)
使用Union
将你的范围粘合在一起
For each
循环比For i = 1 to x
方法您可以立即使用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
它非常简短直观,我每次使用后都会扔掉它。