【问题标题】:Compare dates to fill a cell using VBA Excel使用 VBA Excel 比较日期以填充单元格
【发布时间】:2016-06-16 21:01:04
【问题描述】:

我正在尝试将两个日期与 DD/MM/YYYY HH:MM AM/PM 格式进行比较,其想法是,如果一个日期大于另一个日期,则会在字段中输入“之前”或“之后”,如果它更低的话。

我试过这样做,但失败得很惨。

For col = 0 To objSheet.UsedRange.Rows.Count
    objSheet.Range("A2").Formula = "=IF(Value < B&(col+2), Before,After)"
Next

objSheet.Range("A2").Formula = "=IF(Value &lt; B&amp;(col+2), Before,After)" 行似乎没有抛出任何错误,但我在我的 excel 文件中得到的只是#NAME?

Value 是一个字符串,其中包含要与另一个字符串进行比较的值。示例

' Value = 5/4/2016 8:00:00 PM
' Value in B column: 5/5/2016 12:00:00 PM

那么 if 应该输出 = BEFORE but if

'Value in B column: 5/5/2016 2:00:00 AM 

那么输出应该是之后

我见过一些 diff_date 函数,但它似乎没有被集成,因为它没有作为选项显示。

有没有办法做到这一点?我做错了什么?

【问题讨论】:

  • 我会使用与 Value 不同的变量,因为它是 vba 中的保留字。所以让我们使用vlue,那么你的公式将是:"=IF(""" &amp; Vlue &amp; """ &lt; B" &amp; col + 2 &amp; ", Before,After)"

标签: vba excel date


【解决方案1】:

已编辑 这在 Excel 2013 中适用于我,但我不得不对你在做什么做出一些假设。下面的代码根据 Value 中的日期是在 B 列中的值之前还是之后填充 A 列。

Option Explicit
Option Base 0

Public Sub PopulateDates()
    Dim dateString As String
    Dim row As Long
    dateString = "5/4/2016 8:00:00 PM"
    Dim dateRepresentation As String
    dateRepresentation = "VALUE(""" & dateString & """)"

    Dim newFormula As String
    For row = 1 To ActiveSheet.UsedRange.Rows.Count
        newFormula = "=IF(" & dateRepresentation & " < B" & CStr(row) & ", ""Before"",""After"")"
        ActiveSheet.Cells(row, 1).Formula = newFormula
    Next row
End Sub

这里发生了很多事情。

  • 根据 Scott Craner 的说明,dateString 而不是 Value,而且因为 Value 非常通用,您可能会忘记它的含义。
  • dateRepresentation 是一种在工作表公式中将日期表示为文字的方法。例如,VALUE("5/4/2016 8:00 PM")
  • newFormula 位于单独的行中,因此您可以在进行分配之前在调试器中检查它。 :)
    • row(您有 col+2)是您的 VBA 的一部分,因此它不是您的公式的一部分。 CStr(row) 创建一个字符串(例如,42),然后 &amp; 将该字符串粘贴到 B 之后和 , 之前。
  • ActiveSheet.Cells 而不是 ActiveSheet.Range 因为后者对我不起作用。您将使用 objSheet 而不是 ActiveSheet

所有这些的结果是放在例如单元格 A1 中:

=IF(VALUE("5/4/2016 8:00:00 PM") < B1, "Before","After")

【讨论】:

  • 我只需要前后切换位置,因为我得到了相反的结果。但这有效!非常感谢你
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-21
  • 1970-01-01
  • 2015-03-20
  • 2014-07-10
  • 1970-01-01
  • 1970-01-01
  • 2017-01-23
相关资源
最近更新 更多