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

时间:2011-11-27 05:15:37

标签: excel vba excel-vba

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

这个子程序完成了部分过程:

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

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

4 个答案:

答案 0 :(得分:21)

您需要为代码

制作这些mod
  1. 该表格可能为空白,因此您绝不能将SelectFind一起使用,因为如果“查找”未返回任何内容,则会出现错误。而是测试范围对象Is Not Nothing
  2. Find可以按行和按列进行搜索。您需要确定两个最后一行和列以确定最后使用的真实单元格
  3. 确定真实的最后一个单元格后,使用Range设置从第一个单元格(A1)到使用两个Find范围确定的单元格的范围
  4. 请参阅下面的代码

    如果Find获得了值,那么它会从A1到rng3标识的最后一个使用过的单元格的范围Find

    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
    

答案 1 :(得分:10)

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

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

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

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

答案 2 :(得分:2)

我想出了如何修改代码以选择从指定单元格开始并从最后一个单元格结束的范围。在第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

答案 3 :(得分:0)

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

ActiveSheet.UsedRange
ActiveSheet.UsedRange.Select