【问题标题】:Excel VBA range selectExcel VBA范围选择
【发布时间】:2015-08-21 13:14:44
【问题描述】:

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

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

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    这应该在一行中完成:

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

    【讨论】:

      猜你喜欢
      • 2021-05-22
      • 1970-01-01
      • 2014-03-04
      • 2018-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-17
      相关资源
      最近更新 更多