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将返回A65536A1048576取决于工作表的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")