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

AME*_*AME 12 excel vba excel-vba

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

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

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

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

bre*_*tdj 21

你需要为代码制作这些mod

  1. 工作表可能是空白的,因此您永远不应该使用Select,Find因为如果查找返回任何内容,这将导致错误.而是测试范围对象Is Not Nothing
  2. Find可以按行和按列搜索.您需要确定这两个最后的行和列,以确定真正的上次使用的电池
  3. 一旦确定了真正的最后一个单元格用于Range设置从第一个单元格(A1)到使用这两个Find范围确定的单元格的范围

请参阅下面的代码

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

在此输入图像描述

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
Run Code Online (Sandbox Code Playgroud)


aev*_*nko 11

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

Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row).Select
Run Code Online (Sandbox Code Playgroud)

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

Range("A1:A" & ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row).Select
Run Code Online (Sandbox Code Playgroud)

  • xlCellTypeLastCell通常会过度估计最后使用的单元格位置(来自已删除的数据),除非您在其前面强制使用旧的更新,即添加诸如"ActiveSheet.UsedRange"之类的行.但我同意它比我使用的Find更短,我根据更具体的需要进行了调整.欢呼戴夫. (3认同)