【发布时间】:2019-11-05 10:42:56
【问题描述】:
我有一些 5000 行的数据,其中一列代表一个组的大小。它们都是具有值范围的文本,例如:
"0 - 4", "5 - 9", "10 - 49", "50 - 99", "100 - 249", "250 or more"
这些都存储为文本。
我已经编写了一些 VBA 来使用自动过滤器来显示除我想要的项目之外的所有内容,以便可以删除其他行。喜欢:
activesheet.range("a1:a5000").autofilter field:=1, criteria1:="<>" & strValue
strValue 填充每个值并声明为字符串。
- 一切正常,除非它到达
"10 - 49"。它不会 显示时排除"10 - 49"。 - 我可以手动复制该行为 -- 如果我使用自动过滤器
下拉列,选择文本
Filters>Does Not Equal,然后 然后选择"10 - 49"的下拉选项(或直接输入)和 点击OK,它将不适用。它仍然显示 10 - 49 行。 - 当我返回到 Text
Filters>Custom过滤器时,它会显示 不等于18172。
18172是"Oct-1949"的日期值。
即使我明确地将代码设置为:
activesheet.range("a1:a5000").autofilter field:=1, criteria1:="<>10 - 49"
它将 10 - 49 转换为日期值。如果您录制宏并通过自动筛选下拉菜单手动执行,它将在录制的代码中将标准 1 显示为 "<>Oct-1949"。
我通过使用 criteria1:="<>*" & strValue 让它工作,但这恰好适用于这些数据,但如果我在其中使用 10 - 49 的不同值可能无法工作。
所以我的问题是,有没有办法阻止它转换
"<>10 - 49"
到
"<>Oct-1949"
是否需要以某种方式对其进行转义以告诉它将其视为真实文本?或者这只是 Excel 的一个怪癖?它适用于criteria1:="=10 - 49"(即使在录制宏时)。
它发生在 Excel 2010、2013 和 2016 中。
【问题讨论】:
-
列有文本格式吗?
标签: excel vba autofilter