在VBA中设置日期/时间格式以允许IF语句工作

时间:2014-06-03 14:04:35

标签: excel-vba vba excel

在excel中,我有报告给我一列日期(A列中的m/d/yy)和一列时间(B列中的hh:mm:ss)。如果时间早于&#34; 07:00:00&#34;我在前一天列出的日期有问题。为了解决这个问题,我通常在&#34; C&#34;中运行一个IF语句。列=IF(B2<$C$1,A2+1,A2)。在细胞&#34; C1&#34;我手动输入&#34; 07:00:00&#34;并在C2处启动IF语句并将其复制到其余条目。我还注意到,当我在excel中获得此报告时,时间列设置为&#34; General&#34;的格式。

我遇到了一个问题,试图让它在宏中运行,所以我不必花费额外的时间来做这个(以及其他一些)格式化。我已经将IF语句放入了我想要的单元格中,但没有一个不正确的日期正在改变。这似乎是因为时间的格式化(可能是日期?)。我试图使用.NumberFormat = "hh:mm:ss"来确保所有引用的和新的单元格都相同,但仍然没有变化。我错过了一些让格式匹配的东西吗?以下是我正在使用的代码示例:

Sub Date_Change()
    Dim w1 As Worksheet
    Set w1 = Worksheets("Sheet1")
    w1.Range("C1").FormulaR1C1 = "07:00:00" 
    w1.Range("C1").NumberFormat = "hh:mm:ss"
    w1.Range("A:A").NumberFormat = "m/d/yy"
    w1.Range("B:B").NumberFormat = "hh:mm:ss"
    w1.Range("C2").Formula = "=IF(B2<$C$1,A2+1,A2)"
    w1.Range("C2").NumberFormat = "m/d/yy"
    w1.Range("C2").Select
    ActiveCell.Copy
    ActiveCell.AutoFill Destination:=Range(ActiveCell.Offset(0, -1),
    ActiveCell.Offset(0,-1).End(xlDown).Offset(-1, 0)).Offset(0, 1)
End Sub

1 个答案:

答案 0 :(得分:0)

你可以用

开始C1吗?
w1.Range("C1") = TimeSerial(7, 0, 0)

......并跟进,

w1.Range("C1").NumberFormat = "hh:mm:ss"

这将确定正确的7:00 AM开始时间(例如 0.291667 )。

您为C2提供的IF公式可能更好,

w1.Range("C2").Formula = "=A2 + (B2<$C$1)"