Excel VBA范围选择

Excel VBA范围选择,vba,excel,Vba,Excel,我有一个宏,需要在其中选择范围R2:工作表中的最后一行。但是,我的工作表的最后一行在R列中可能为空。目前我正在使用这个 Dim t As Range Set t = Range("R2", Range("R1000").End(xlUp)) For Each Cell In t If IsEmpty(Cell) Then Cell.Activate ActiveCell.Value = "To Be Picked Up" End If Next

我有一个宏,需要在其中选择范围
R2:工作表中的最后一行
。但是,我的工作表的最后一行在
R列中可能为空。目前我正在使用这个

Dim t As Range
Set t = Range("R2", Range("R1000").End(xlUp))

For Each Cell In t
    If IsEmpty(Cell) Then
        Cell.Activate
        ActiveCell.Value = "To Be Picked Up"
    End If
Next
但是,如果最后一行的
R
列中有一个空白,那么它将被忽略。我希望使用列
A
来提取范围,因为最后一行数据总是有列
A
。比如说

Dim t As Range
Set t = Range("R2", Range("A1000").End(xlUp).ActiveCell.Offset(0, 17))

For Each Cell In t
    If IsEmpty(Cell) Then
        Cell.Activate
        ActiveCell.Value = "To Be Picked Up"
    End If
Next

这看起来很简单,但我肯定我错过了一些愚蠢的事情。任何帮助或替代方法都会很有帮助,谢谢。

这应该在一行中实现:

Sub SO()     
    Range("R2:R" & Range("A" & Rows.Count).End(xlUp).Row).SpecialCells(xlCellTypeBlanks).Value = "To Be Picked Up"
End Sub 

但具体地回答你的问题

Range()
方法将接受字符串作为获取范围的参数。因此,我们可以按照任何方式构建此字符串:

"A1000"                '// A1000
"A" & 1000             '// A1000
"A" & "10" & "00"      '// A1000
"A" & CStr(1001 - 1)   '// A1000
  • “A”和Rows.Count将根据工作表的类型返回
    A65536
    A1048576

  • Range(“A1048576”).End(xlUp)
    将按照指定方向检索该区域的最后一个单元格或下一区域的第一个单元格

  • Range(“A1048576”).End(xlUp)。Row
    将返回该单元格的行号(为了参数起见,假设它是A1000),因此返回值为
    1000

  • “R2:R”和Range(“A”和Rows.Count).End(xlUp).Row
    因此生成字符串
    R2:R1000

  • 最后,
    Range(“R2:R”)和Range(“A”和Rows.Count).End(xlUp.Row)
    Range(“R2:R1000”)

"A1000"                '// A1000
"A" & 1000             '// A1000
"A" & "10" & "00"      '// A1000
"A" & CStr(1001 - 1)   '// A1000