我有一个宏,我需要选择范围R2:last row in sheet
。但是,在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
看起来很简单,但我确定我错过了一些愚蠢的东西。任何帮助或替代方法都会有所帮助,谢谢。
答案 0 :(得分:2)
这应该在一行中完成:
Sub SO()
Range("R2:R" & Range("A" & Rows.Count).End(xlUp).Row).SpecialCells(xlCellTypeBlanks).Value = "To Be Picked Up"
End Sub
但回答你的问题具体
Set t = Range("R2:R" & Range("A" & Rows.Count).End(xlUp).Row)
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")
相同