Excel VBA范围select
我有一个macros,我需要select范围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
这似乎很简单,但我确定我错过了一些愚蠢的东西。 任何帮助或替代方法将是有益的谢谢你。
这应该在一行中做到这一点:
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()
方法将接受一个string作为参数来获得一个范围。所以我们可以用任何我们想要的方式来构build这个string:
"A1000" '// A1000 "A" & 1000 '// A1000 "A" & "10" & "00" '// A1000 "A" & CStr(1001 - 1) '// A1000
-
"A" & Rows.Count
A65536
将返回A65536
或A1048576
取决于工作表的types。 -
如你所知,
Range("A1048576").End(xlUp)
将按照指定的方向检索该区域中的最后一个单元格或下一个区域中的第一个单元格。 -
Range("A1048576").End(xlUp).Row
将返回该单元格的行号(假设它是参数的A1000),所以返回值是1000
。 -
"R2:R" & Range("A" & Rows.Count).End(xlUp).Row
因此使stringR2:R1000
。 -
最后,
Range("R2:R" & Range("A" & Rows.Count).End(xlUp).Row)
与Range("R2:R1000")