首页 文章

Excel VBA范围选择

提问于
浏览
0

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

  • 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 将返回该单元格的行号(为了参数,让's say it' s 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") 相同

相关问题