如何在不改变自动筛选状态下获取工作表真实最后一行?
在不关闭AutoFilter的情况下获取Excel工作表真实最后一行
以下几种方法可以在保留AutoFilter状态的前提下,获取工作表未筛选时的真实最后一行:
方法1:利用UsedRange属性
UsedRange会返回工作表中所有曾被使用过的单元格区域,不受筛选状态影响。通过计算该区域的起始行和行数,就能得到最后一行:
Dim lastRow As Long ' 先刷新UsedRange,避免包含已清空的旧数据区域 ActiveSheet.UsedRange lastRow = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
方法2:定位xlCellTypeLastCell
直接定位工作表中最后一个有内容(或曾有内容)的单元格,该方法忽略筛选隐藏的行:
Dim lastRow As Long lastRow = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
注意:如果之前删除过大量内容但未保存工作表,该单元格的位置可能不会自动更新,保存后即可恢复准确。
方法3:带参数的Find方法
普通Find会受筛选影响,但通过指定LookIn:=xlFormulas并设置搜索方向为从后往前,可以遍历所有单元格(包括筛选隐藏的):
Dim lastRow As Long With ActiveSheet lastRow = .Cells.Find(What:="*", _ After:=.Cells(1, 1), _ LookIn:=xlFormulas, _ LookAt:=xlPart, _ SearchOrder:=xlByRows, _ SearchDirection:=xlPrevious, _ MatchCase:=False).Row End With
这个方法适合需要精准定位当前有内容的最后一行(不包含已清空的旧使用区域)。
内容的提问来源于stack exchange,提问作者OTstand
相关产品推荐
相关产品推荐

