比较日期以使用VBA Excel填充单元格

时间:2016-06-16 21:01:05

标签: vba excel-vba date excel

我试图将两个日期与DD / MM / YYYY HH:MM AM / PM格式进行比较,我们的想法是,如果一个日期大于另一个日期,则会在字段中输入单词&#34 ;之前"或"之后"如果它更低。

我已经尝试过这样做但却失败了。

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 < B&(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但是如果

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

然后输出应该是AFTER

我已经看到了一些diff_date函数,但它似乎没有被集成,因为它没有显示为一个选项。

有没有办法实现这个目标?我做错了什么?

1 个答案:

答案 0 :(得分:1)

已编辑这在Excel 2013中适用于我,但我不得不对您正在做的事情做出一些假设。以下代码填写A列,具体取决于Value中的日期是否在B列中的值之前或之后。

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),然后&B之后和,之前粘贴该字符串。
  • ActiveSheet.Cells而非ActiveSheet.Range,因为后者不适合我。您可以使用objSheet代替ActiveSheet

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

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