You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Excel VBA统计含内容的隐藏/筛选行数量

解决VBA统计包含文本的隐藏/筛选行问题

原来的代码用Range.End(xlUp)确实会踩坑——当工作表有筛选隐藏行时,它只会识别可见区域的最后一行,像你说的第2行被隐藏就统计不到。下面给你两个靠谱的修改方案:

方法1:用UsedRange快速获取(适合简单场景)

UsedRange会识别工作表中所有被使用过的区域,包括隐藏行,代码很简洁:

Total_rows_Pick = Workbooks("Job Production Monitoring.xlsm").Worksheets("Pick-ups").UsedRange.Rows.Count

不过要注意:如果工作表开头有空白行,这个方法会把空白行也算进去,比如第一行空、第二行有数据,它返回的总行数会包含第一行,这时候你可能需要根据实际情况调整行号。

方法2:用Find精准定位最后一行(推荐)

Find方法可以遍历整个B列(不管行是否隐藏),找到最后一个有文本的单元格,这个方法更可靠,适配各种场景:

Dim ws As Worksheet
Set ws = Workbooks("Job Production Monitoring.xlsm").Worksheets("Pick-ups")

' 查找B列最后一个非空单元格(包含隐藏行)
Total_rows_Pick = ws.Columns("B").Find(What:="*", _
                    After:=ws.Cells(1, "B"), _
                    LookIn:=xlValues, _
                    LookAt:=xlPart, _
                    SearchOrder:=xlByRows, _
                    SearchDirection:=xlPrevious, _
                    MatchCase:=False).Row

给你拆解下关键参数:

  • What:="*":匹配任意非空内容
  • SearchDirection:=xlPrevious:从B列底部往上找,直接定位到最后一行有数据的单元格
  • LookIn:=xlValues:基于单元格显示的文本查找,如果要包含公式结果可以改成xlFormulas

额外防坑提示

如果B列全是空的,Find会返回Nothing,直接用.Row会报错,所以最好加个判断:

Dim lastCell As Range
Set lastCell = ws.Columns("B").Find(What:="*", _
                After:=ws.Cells(1, "B"), _
                LookIn:=xlValues, _
                LookAt:=xlPart, _
                SearchOrder:=xlByRows, _
                SearchDirection:=xlPrevious, _
                MatchCase:=False)

If Not lastCell Is Nothing Then
    Total_rows_Pick = lastCell.Row
Else
    Total_rows_Pick = 1 ' 全空时默认第一行,你可以根据需求改成0或者其他值
End If

内容的提问来源于stack exchange,提问作者Pherdindy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:33:13