背景
当我试图解决 problem对于另一个用户,我似乎遇到了本地问题。
想象一些非常简单的示例数据(真实的日期时间值):
| DateTimeVals |
|----------------|
| 1-1-2019 01:00 |
| 2-1-2019 01:00 |
| 3-1-2019 01:00 |
| 4-1-2019 01:00 |
| 5-1-2019 01:00 |
向您展示手头的问题不需要更复杂。假设我们想要过滤
3-1-2019 01:00
(1 月 3 日)。只需使用:Range("A1").AutoFilter Field:=1, Criteria1:="3-1-2019 01:00"
工作得很好,硬编码的字符串变量确实有效,但我想到了对真实数值进行更动态过滤的方法,如下所示。
代码
Sub test()
Dim SearchNum As Double: SearchNum = DateValue("3-1-2019") + TimeValue("1:00")
Range("A1").AutoFilter Field:=1, Criteria1:=">=" & SearchNum, Operator:=xlAnd, Criteria2:="<=" & SearchNum
End Sub
通过
WATCHES
密切关注此变量显示以下内容:但应用的过滤器显示 0 个结果:
这是奇怪的部分,应用的过滤器告诉我,我显然在没有小数点逗号的完整值之间进行了过滤。
手动将逗号添加到此数字会使数字变成格式化的日期/时间值。但没有显示结果。
解决方法
我使用以下代码找到了解决方法:
Sub test()
Dim str As String: str = DateSerial(2019, 1, 3) & " " & Format(TimeSerial(1, 0, 0), "hh:mm")
Range("A1").AutoFilter Field:=1, Criteria1:=str
End Sub
问题
虽然我确实读到了 MS 可能如何忽略了
AutoFilter
,我认为我描述的问题必须与本地设置有关。怎么会VBA
将标准作为一个整数插入?以及如何避免?除了我的解决方法(或帮助列)之外,还有其他方法吗?注:
TimeValue
容易出现浮点错误,如 1:00
小数点比显示的小数点多得多。在字符串变量中插入完整的数值解决了逗号的消失并显示了格式化的日期/时间值,但是没有显示结果。 最佳答案
你试过ROUND()
先给变量?
由于您不需要过滤器中的秒数,您可以通过四舍五入来解决问题,这可能会为在过滤器中查找提供“精确”值。
关于excel - 自动筛选日期时间值 - 本地小数点问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58199518/