首页 > 解决方案 > Excel vba 过滤表 BodyRange 不正确 SpecialCells

问题描述

我有一个表,我用 vba 命令过滤:

tbl.Range.AutoFilter Field:=11, Criteria1:="=*" & Left(street, 3) & "*", Operator:=xlAnd

这是一个 *contains* 过滤器,BodyRange(目视检查)应该计算 7 行,但是有了这个

tbl.DataBodyRange.SpecialCells(xlCellTypeVisible)

我只检索不到其中的 4 个,它的行为就像 BodyRange.SpecialCells 从过滤器中捕获仅以过滤器值开头的值而不是包含它的值(如果我过滤的列街道是“pilsudzki”“al.pilsudzki”“ al. gen pilsudzki" BodyRange 将跳过所有的 "al. pilsudzki" 等...并且只给我 "pilsudzki" 即以 " pils *" 开头的那个)

为了解决这个问题,我必须改用这个技巧:

Set rnTble = Sheet1.Range("K2:K150000").SpecialCells(xlCellTypeVisible)

For Each cll In rnTble.Cells
Me.ListBox2.AddItem cll.Value
If cll.Value = "" Then Exit For
Next

然后只有这样我才能捕获所有包含“*pils*”的过滤值

任何想法为什么会这样?

标签: excelvbarangefiltering

解决方案


过滤部分是将数据分成几个区域。因为它们是分开的,所以您需要使用区域。

For Each rng In rngTble.Areas
    For Each cll In rng
        Me.ListBox2.AddItem cll.Value
    Next cll
Next rng

没有过滤器

在此处输入图像描述

过滤状态

在此处输入图像描述


推荐阅读