【问题标题】:Excel VBA: Optimal use of DateValue in VBA (or other method to compare dates)Excel VBA:在 VBA 中优化使用 DateValue(或其他比较日期的方法)
【发布时间】:2018-04-26 08:17:33
【问题描述】:

我在 Access 中编写了一个 VBA 宏,它基于几个不同的文件创建了一个新的 excel 文件。我无法更改源文件格式化数据的方式,我想编写一个简单的 IF 语句(如果日期 X 已超过日期 Y,则删除整行)。问题是日期的格式不同。我能够做到的方式是创建一个新列:

=IF(DATEVALUE(A2)>DATEVALUE(H2),TRUE,FALSE)

然后从那里开始,最后删除该列。但这感觉不对,我相信有更好的解决方案。我一直在尝试做类似的事情

 If ifDelete = vbYes And .Cells(Lrow, 19).Value Like "*timing*" And DateValue(.Cells(Lrow, 1).Value) > DateValue(.Cells(Lrow, 8).Value) Then
      .Cells(Lrow, 19).EntireRow.Delete
 End If

但这显然行不通。我还尝试在运行该 IF 语句之前对日期列进行格式化,但仍然没有运气。如果有帮助,日期格式为 MM/DD/YYYY 和 M/D/YYYY。出于某种原因,在第二个或两个字段上使用 .NumberFormat = "MM/DD/YYYY" 也不起作用。

亲切的问候, heaton124.

【问题讨论】:

  • 显然,您说的是STRINGS CONTAINING DATE-LIKE VALUES,而不是真正的日期值。最简单且正确的方法是通过在 vb 中将这些字符串转换为内部日期值来确保比较 DATES AGAINST DATES
  • 没错,我知道。当我在测试文件上使用这样的代码时: Range("A1:J1").NumberFormat = "mm/dd/yyyy" 然后比较两个日期也无济于事。无论我输入“mm/dd/yyyy”还是“mm-dd-yyyy”或其他任何内容,这些单元格中的值都不会改变。不知道这里有什么问题。
  • 您能分享一下您“所谓的”日期数据的屏幕截图吗?这样我们就可以看到它们是如何存储的,以及以什么格式存储?
  • 就是这样。 link我还在右上角添加了“通用”类型。当我使用宏更改 NumberFormat 时,它确实会更改为“自定义”,但不会真正影响我的其他宏对数据的理解。顺便提一句。如果这很重要的话,该数据是从一月份开始的。
  • 您是否尝试过使用VBA函数CDate()

标签: vba excel date if-statement


【解决方案1】:

根据 p.phidot 的建议,我将我的评论作为答案,以便其他人可以标记并获得它。

所以,答案是:

尝试使用 VBA 函数CDate()

干杯。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-14
    • 1970-01-01
    • 2014-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多