Excel VBA范围选择

时间:2015-08-21 13:14:45

标签: excel vba excel-vba

我有一个宏,我需要选择范围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

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

1 个答案:

答案 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将返回A65536A1048576,具体取决于工作表的类型。

  • 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")相同