首页 文章

工作表中最后使用的单元格

提问于
浏览
2

我是新来的,我希望使用Excel VBA返回工作表中最后使用过的单元格 .

我看了Error in finding last used cell in VBA)但是这并没有回答我遇到的两个问题:

  • .Cells.Find(...).Row 方法在我的代码中花费太长时间 .

  • “最后使用过的单元格”的含义可能很奇怪......单元格可能是空白的 . 我想获取具有最后一个使用过的单元格的列,并将其与具有最后一个使用过的单元格的行配对 .

解释:假设工作表为空,除了 A1:C3D2B4 中的数据 . (Exhibit 1

我感兴趣的最后一个单元格是 D4 因为我希望工作表中的最后一个单元格包含工作表中的所有数据 .

enter image description here

既然我已经解释了我在寻找什么,那么任何人都可以提供任何建议

  • 如何使cell.find运行得更快或

  • 另一种在工作表中找到"last cell"的可靠方法?

谢谢!

3 回答

  • -1

    你试过这个吗?

    Dim r As Range
    Set r = Sheet1.UsedRange.SpecialCells(xlCellTypeLastCell)
    Debug.Print r.Address
    

    输出示例:

    $ D $ 4

    已知UsedRange并不总是与实际使用的数据范围匹配 . 一些解决方法是使用 CurrentRegion

    Dim r As Range
    With Sheet1.Range("A1").CurrentRegion
        Set r = Sheet1.Cells(.Rows.count, .Columns.count)
    End With
    Debug.Print r.Address
    

    如果数据不是从 A1 开始,也许这样:

    With Sheet1.Cells.Find("*").CurrentRegion
    
  • 4

    按行和列使用 Find 来标识此单元格 .

    Sub GetLastCellRange()
            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

    虽然答案非常有效,但我会小心使用SpecialCells,CurrentRegion以及所有这些 .

    尽管它们大部分时间都在工作,但根据我的经验,它们并非100%可靠 .

    例如,如果数据恰好具有空列或行等,则CurrentRegion将不会获取所有数据 .

    在我看来,最好的方法是使用 Headers 和数据 . 然后,您可以枚举所有标头并找到该列中最后使用的行 . 然后,您可以确定使用的最大行,现在可以定义数据范围 .

    顺便说一句,如果你选择指定列中的最后一个单元格然后使用Range.End(xlUp),你可以快速确定没有循环的那一列的最后一行 .

    希望有所帮助 .

相关问题