gpt4 book ai didi

excel - 在 Excel VBA 中查找上次使用的单元格

转载 作者:行者123 更新时间:2023-12-01 16:14:33 24 4
gpt4 key购买 nike

当我想查找最后使用的单元格值时,我使用:

Dim LastRow As Long

LastRow = Range("E4:E48").End(xlDown).Row

Debug.Print LastRow

当我将单个元素放入单元格时,我得到了错误的输出。但是,当我将多个值放入单元格时,输出是正确的。这背后的原因是什么?

最佳答案

注意:我打算将其设为“一站式帖子”,您可以使用正确方式查找最后一行。这还将涵盖查找最后一行时要遵循的最佳实践。因此,每当我遇到新的场景/信息时,我都会继续更新它。

<小时/>

查找最后一行的不可靠方法

查找最后一行的一些最常见方法非常不可靠,因此不应使用。

  1. 使用范围
  2. xl向下
  3. 计数A

UsedRange 不应该永远用于查找最后一个有数据的单元格。这是非常不可靠的。尝试这个实验。

在单元格 A5 中键入内容。现在,当您使用下面给出的任何方法计算最后一行时,它会给您 5。现在将单元格 A10 涂成红色。如果您现在使用以下任何代码,您仍然会得到 5。如果您使用 Usedrange.Rows.Count 您会得到什么?不会是 5。

以下场景展示了 UsedRange 的工作原理。

enter image description here

xlDown 同样不可靠。

考虑这段代码

lastrow = Range("A1").End(xlDown).Row

如果只有一个单元格 (A1) 有数据,会发生什么情况?您最终将到达工作表中的最后一行!这就像选择单元格A1,然后按End键,然后按向下箭头键。如果范围内有空白单元格,这也会给您带来不可靠的结果。

CountA 也不可靠,因为如果中间有空白单元格,它会给出错误的结果。

因此,应避免使用 UsedRangexlDownCountA 来查找最后一个单元格。

<小时/>

查找列中的最后一行

要查找 Col E 中的最后一行,请使用此

With Sheets("Sheet1")
LastRow = .Range("E" & .Rows.Count).End(xlUp).Row
End With

如果您注意到 Rows.Count 之前有一个 .。我们常常选择忽视这一点。请参阅THIS关于您可能遇到的错误的问题。我总是建议在 Rows.CountColumns.Count 之前使用 .。该问题是一个典型的场景,其中代码将失败,因为 Rows.Count 对于 Excel 2003 及更早版本返回 65536,对于 Excel 2007 和更早版本返回 1048576之后。同样,Columns.Count 分别返回 25616384

上述 Excel 2007+ 具有 1048576 行的事实也强调了这样一个事实:我们应该始终将保存行值的变量声明为 Long 而不是 Integer 否则你会得到一个Overflow错误。

请注意,此方法将跳过任何隐藏行。回首my screenshot above for column A ,如果第 8 行被隐藏,此方法将返回 5 而不是 8

<小时/>

查找工作表中的最后一行

要查找工作表中的Effective最后一行,请使用它。请注意 Application.WorksheetFunction.CountA(.Cells) 的使用。这是必需的,因为如果工作表中没有包含数据的单元格,则 .Find 将为您提供运行时错误 91:未设置对象变量或 With block 变量

With Sheets("Sheet1")
If Application.WorksheetFunction.CountA(.Cells) <> 0 Then
lastrow = .Cells.Find(What:="*", _
After:=.Range("A1"), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
Else
lastrow = 1
End If
End With
<小时/>

查找表中的最后一行(ListObject)

同样的原则适用,例如获取表格第三列的最后一行:

Sub FindLastRowInExcelTableColAandB()
Dim lastRow As Long
Dim ws As Worksheet, tbl as ListObject
Set ws = Sheets("Sheet1") 'Modify as needed
'Assuming the name of the table is "Table1", modify as needed
Set tbl = ws.ListObjects("Table1")

With tbl.ListColumns(3).Range
lastrow = .Find(What:="*", _
After:=.Cells(1), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
End With

End Sub

关于excel - 在 Excel VBA 中查找上次使用的单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11169445/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com