【问题标题】:VBA AutoFilter with symbol (*) Not Working带有符号 (*) 的 VBA 自动筛选不起作用
【发布时间】:2017-07-05 18:14:45
【问题描述】:

我正在尝试使用 AutoFilter 过滤 excel 数据,但不知何故它不起作用。 我要过滤的数据代表时间,格式为 00:00 到 23:59。 具体来说,我正在尝试按小时过滤,例如“00”到“23”,或“00:”到“23:”,以任何有效者为准。 但是,它不起作用,并且没有一个被过滤。

假设有一个类似的表

|ID|日期|时间 |
| 0 | 7/5 | 00:00|
| 1 | 7/5 | 00:20|
| 2 | 7/5 | 00:35|
| 3 | 7/5 | 00:47|
| 4 | 7/5 | 00:58|
| 5 | 7/5 | 01:03|
| 6 | 7/5 | 01:15|
| 7 | 7/5 | 01:27|
| 8 | 7/5 | 01:48|

我测试了以下宏:

Selection.Autofilter Field:=3, Criteria1:="=00*"

希望我能得到前 5 行数据,因为它们的时间以“00”开头。我查找了有关如何在 AutoFilter 中设置“开始于”的信息,发现可以使用星号 (*)。但是,这不起作用,并且没有任何行被过滤。 有趣的是,如果我尝试以下操作:

Selection.Autofilter Field:=3, Criteria1:="00:20"

它工作得很好,它只过滤了时间为“00:20”的第二行。

为什么我的第一个带有 * 的宏不起作用?我尝试了许多不同的方法都无济于事。谁能告诉我为什么这不起作用?

【问题讨论】:

  • Criteria1="=00*" -----> Criteria1:="=00*"(不要忘记参数名称后面的)。
  • 感谢您指出这一点!这是一个错字,在实际程序中,它有冒号。
  • 您在运行宏时选择了什么?为什么要使用Selection!?尝试在一个明确的、完全限定的范围内运行它。

标签: vba excel


【解决方案1】:

Excel 将时间值视为十进制数。一种方法是插入一个名为“Hour”的辅助列,并将以下公式放入 D2

=HOUR(C2)

然后复制下来。

现在过滤如下数据...

Range("$A$1:$D1").Autofilter Field:=4, Criteria1:="=0"

【讨论】:

  • 谢谢!我是 Excel 宏的新手,不知道数据有不同的类型。我以为它们都是字符串。我用这个作为提示,我设法让它工作。感谢大家的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多