首页 文章

返回从A1到最后使用的真实单元格的范围

提问于
浏览
11

我想选择电子表格中的所有行和列 . 宏需要是动态的,因为每次调用宏时,列数和行数往往会变化 . 它还需要能够考虑空行和列 .

该子程序完成了部分过程:

Sub FindLastCell()
Cells.Find(What:="*", After:=[A1], SearchDirection:=xlPrevious).Select
End Sub

它查找并选择电子表格中的最后一个单元格 . 现在我已经找到了电子表格中的最后一个单元格,如何选择单元格A1到LastCell作为范围?

4 回答

  • 2

    你需要为代码制作这些mod

    • 工作表可能为空,因此您永远不应将 SelectFind 一起使用,因为如果查找不返回任何内容,则会出错 . 而是测试范围对象 Is Not Nothing

    • Find 可以按行和按列搜索 . 您需要确定 both 最后一行和列以确定最后使用的真实单元格

    • 一旦确定了真正的最后一个单元格,使用 Range 设置从第一个单元格(A1)到使用两个 Find 范围确定的单元格的范围

    请参阅下面的代码

    如果 Find 得到一个值,那么它从A1到_1136976_由两个 Find 标识的最后一个使用的单元格的范围 rng3 .

    enter image description here

    Sub GetRange()
        Dim rng1 As Range
        Dim rng2 As Range
        Dim rng3 As Range
        Set rng1 = Cells.Find("*", [a1], xlFormulas, , xlByRows, xlPrevious)
        Set rng2 = Cells.Find("*", [a1], xlFormulas, , xlByColumns, xlPrevious)
        If Not rng1 Is Nothing Then
            Set rng3 = Range([a1], Cells(rng1.Row, rng2.Column))
            MsgBox "Range is " & rng3.Address(0, 0)
            'if you need to actual select the range (which is rare in VBA)
            Application.Goto rng3 
        Else
            MsgBox "sheet is blank", vbCritical
        End If
    End Sub
    
  • 0

    在A列中选择A1到最后一个使用的单元格(包括其间的空白)就像这样简单:

    Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row).Select
    

    要选择A1到整个工作表中使用的最后一个单元格(无论它是否在A列中使用):

    Range("A1:A" & ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row).Select
    
  • 19

    我想出了如何修改代码以选择从指定单元格开始并在最后一个单元格结束的范围 . 在第8行,将a1更改为您要开始的单元格 . 就我而言,我选择了j28 .

    Set rng3 = Range([j28], Cells(rng1.Row, rng2.Column))
    

    完整代码:

    Sub GetRange()
            Dim rng1 As Range
            Dim rng2 As Range
            Dim rng3 As Range
            Set rng1 = Cells.Find("*", [a1], , , xlByRows, xlPrevious)
            Set rng2 = Cells.Find("*", [a1], , , xlByColumns, xlPrevious)
            If Not rng1 Is Nothing Then
                Set rng3 = Range([j28], Cells(rng1.Row, rng2.Column))
                MsgBox "Range is " & rng3.Address(0, 0)
                'if you need to actual select the range (which is rare in VBA)
                Application.Goto rng3
            Else
                MsgBox "sheet is blank", vbCritical
            End If
        End Sub
    
  • 10

    @brettdj指出使用 ActiveSheet.UsedRange 来清除当前使用的范围 . 我会使用下面的简单代码 .

    ActiveSheet.UsedRange
    ActiveSheet.UsedRange.Select
    

相关问题