我是新来的,我希望使用 Excel VBA 返回工作表中最后使用的单元格。
我查看了Error in find last used cell in Excel with VBA),但这并没有解决我遇到的两个问题:
该.Cells.Find(...).Row方法在我的代码中花费的时间太长。
我的“最后使用的单元格”的意思可能很奇怪……单元格可以是空白的。我想取具有最后使用的单元格的列并将其与具有最后使用的单元格的行配对。
解释一下:假设一张工作表是空的,除了A1:C3、D2和 中的数据B4。(图表 1 )
我感兴趣的最后一个单元格是D4因为我想要包含工作表中所有数据的工作表中的最后一个单元格。
既然我已经解释了我要找的东西,任何人都可以提供建议
谢谢!
你试过这个吗?
Dim r As Range
Set r = Sheet1.UsedRange.SpecialCells(xlCellTypeLastCell)
Debug.Print r.Address
Run Code Online (Sandbox Code Playgroud)
您的示例的输出:
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
Run Code Online (Sandbox Code Playgroud)
此外,如果数据不是从 开始A1,也许是这样:
With Sheet1.Cells.Find("*").CurrentRegion
Run Code Online (Sandbox Code Playgroud)
使用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
Run Code Online (Sandbox Code Playgroud)