2016-06-16 153 views
1

我试图比较两个日期格式DD/MM/YYYY HH:MM上午/下午,这个想法是,如果一个日期大于另一个放入如果字段较低,则字段为“之前”或“之后”。比较日期以填充单元格使用VBA Excel

我试过这样做,但失败惨败。 objSheet.Range("A2").Formula = "=IF(Value < B&(col+2), Before,After)"

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

行似乎不会引发任何错误,但所有我在Excel文件中得到的是#NAME?

值是一个包含到另一个字符串将是比较值的字符串。例如

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

那么是否应该输出=之前,但如果

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

那么输出后应

我已经看到了一些diff_date功能,但它似乎并没有被整合因为它没有显示为一个选项。

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

+1

我会用比数值不同的变量,因为它是在VBA中的保留字。因此,让我们使用'vlue',那么你的公式就是:''= IF(“”“&Vlue&”“”

回答

1

编辑这适用于Excel 2013中的我,但我必须对你正在做什么做一些假设。下面的代码取决于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 

很多会在这里填写后在A列。

  • 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") 
+0

我只需要在之前,因为我得到了相反的结果。但这工作!非常非常感谢你 – Splendonia