excel - 自动筛选日期时间值 - 本地小数点问题

标签 excel vba filter formatting autofilter

背景

当我试图解决 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 密切关注此变量显示以下内容:

enter image description here

但应用的过滤器显示 0 个结果:

enter image description here

这是奇怪的部分,应用的过滤器告诉我,我显然在没有小数点逗号的完整值之间进行了过滤。

enter image description here

手动将逗号添加到此数字会使数字变成格式化的日期/时间值。但没有显示结果。

解决方法

我使用以下代码找到了解决方法:
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/

    相关文章:

    c# - OpenXML Excel 如何在 SharedStringTable 中更改单元格的值

    excel - 当单元格打开并选择另一个工作表时,Workbook_sheetChange 崩溃

    sql - 从 Power Pivot ("Item.data"提取 2000 万行)

    vba - 应该追加的文本被覆盖

    javascript - 过滤器列表 - 根据计数键删除两个重复项中较小的一个

    excel - 添加行时自动更改函数范围

    excel - XlsxWriter:根据整个工作表中的单元格值插入特定图像

    excel - VLOOKUP 产生错误的数字

    Javascript过滤对象数组跳过空字符串

    php - 如何在php中通过键值从数组对象获取数组项