上次使用的单元格中
我在这里是新的,我正在寻找使用Excel VBA返回工作表中最后使用的单元格。
I'vv 在VBA中查找最后使用的单元格时发现错误 ),但是这并没有回答我遇到的两个问题:
-
.Cells.Find(...).Row
方法在我的代码中占用过多的时间。 -
我的“上次使用的单元格”的含义可能很奇怪…单元格可能是空白的。 我想采取最后使用的单元格的列,并与具有最后一次使用的单元格的行进行配对。
解释:假设一张纸是空的,除了A1:C3
数据A1:C3
, D2
和B4
。 ( 图表1 )
我感兴趣的最后一个单元格是D4
因为我希望工作表中包含工作表中所有数据的最后一个单元格。
现在我已经解释了我在找什么,任何人都可以提供build议
- 如何使cells.find运行得更快或
- 另一个可靠的方法来find工作表中的“最后一个单元格”?
谢谢!
你试过这个吗?
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
使用按行和列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
虽然答案是非常有效的,我会小心使用SpecialCells,CurrentRegion和所有这些。
尽pipe他们大部分时间都在工作,但是我的经验并不是100%可靠的。
例如,如果数据碰巧有一个空的列或行,则CurrentRegion将不会拾取所有数据。
最好的方法,在我看来是随着您的数据使用标题。 然后,您可以枚举所有标题并查找该列中最后一次使用的行。 然后,您可以确定使用的最大行,然后定义您的数据范围。
顺便说一句,如果您select指定列中的最后一个单元格,然后使用Range.End(xlUp),您可以快速确定最后使用该列没有循环的行。
希望有所帮助。