在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
答案 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)"