我试图将两个日期与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函数,但它似乎没有被集成,因为它没有显示为一个选项。
有没有办法实现这个目标?我做错了什么?
答案 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
很多人在这里。
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")