数字为文本的高级过滤器

时间:2018-11-03 01:27:53

标签: excel vba excel-vba

我在Excel中使用高级过滤器时遇到问题。

我将使您理解并重现同样的问题变得很简单。

有一个表T1 和数据

Table T1

还有一个辅助表T2 ,它是T1的克隆但为空

我将使用T2 进行高级过滤 T1

Table T2

我将通过我创建的宏来完成此操作,但是您只需单击高级过滤器,然后在对角线中填入“搜索到的值”后选择第二张表即可, SEARCH FIELD栏和一个宏用于此目的,并应用类似这样的过滤器:

O(1)

如果我在搜索字段中写572,会发生什么情况

Table T1 Search 572

Table T2 Range

这是我的宏执行的中间步骤:

Adv Filter

结果:

Result

有问题:

T1表中,我有一些列,其中一列具有邮政编码(CAP),其单元格的格式为文本,但仅用数字写

如果我使用“高级过滤器”搜索“文字”,它将起作用:示例

Table T1 Search Text

Table T2 Data

但是,如果我尝试搜索数字值,则只有在搜索到的值匹配整个单元格内容并且“部分工作”的情况下,它才会起作用(他只会在其中显示数字结果单元格的格式为TEXT,黄色背景的单元格的格式为NUMBER ),如果我在搜索字段中放置了Jolly字符:

不起作用:

Not Working

不显示黄色单元格

Partially Working

显示全部:

Working

如果单元格是文本并以数字开头,则只有在我将整个起始数字和至少1个字符放在其后的情况下,他才能工作:

搜索622SVCB,不起作用:

Not Working

工作:

Working

除具有黄色背景的单元格外,每个列均已设置为“ TEXT”。为什么会这样?

2 个答案:

答案 0 :(得分:3)

在Excel中使用高级过滤器时,请记住以下几点:

  • Criteria range的表达式的计算结果应为TRUEFALSE
  • Criteria range中输入数字时,无论数字在电子表格中的格式如何,Excel都会查找该精确数字(不高,不低)
  • Excel假定Criteria range之前是= 除非 ,过滤器以不同的运算符开头(例如>,{ {1}},<>=<=
  • 不管 TableT1 的格式如何,Excel都会按照键入的内容来查看<>。例如,如果Criteria range all 个数字(例如Criteria range),则Excel将查找数字匹配项。如果123都是字母字母和数字的组合(例如Criteria rangeabc),则Excel将基于文本字符进行比较。 / li>

据我所知,您的筛选器不适用于部分数字,因为您实际上是在要求Excel查找该确切数字,而该数字在您的“数据库”中不存在。如果您在 TableT2 中的条件前面加上一个运算符,则应该得到想要的结果。

过滤条件abc123
Filter criteria

已过滤的结果TableT2
Filtered results

答案 1 :(得分:3)

我将尝试回答您的问题:

  1. 即使您所有表格的格式都是文本,黄色突出显示的字段也仍然是数字,因为它仍然与RIGHT对齐

  2. 标准矩阵用作文本过滤器(类似于屏幕截图1,但不作为屏幕截图2)。除非完全匹配,否则文本过滤器将不适用于数字 enter image description here

enter image description here

要解决您的问题:

  1. 在表中添加一行代码,以在应用过滤器之前强制每一列为文本
  2. 将*添加到所有搜索值中,以便也将其读取为文本

代码

T2.SetDiagonalValue val & "*"

'sample code to force the column to TEXT 

Range("Table1[[#All],[TEXT WITH NUMBER]]").TextToColumns 
Destination:=Range("Table1[[#Headers],[TEXT WITH NUMBER]]"), DataType:=xlFixedWidth, 
FieldInfo:=Array(0, 2)

'end of sample code

T1.Range.AdvancedFilter xlFilterInPlace, T2.Range

这是我得到的结果:

enter image description here

希望这会有所帮助