首页 > 解决方案 > VBA - 在命名范围内使用 for 循环添加 dd/mm/yyyy 以增加 hh/mm 单元格值

问题描述

我很新,VBA所以请原谅这个问题,我正在编写一个代码,它将遍历一个命名范围并添加dd/mm/yyyy,当单元格值通过时 dd 逐渐增加0000
我在if time1 < time2 then statement.
具体如何引用'dd/mm/yyyy'inactive cell而不是hh/mm.

关于如何做到这一点的更好逻辑的任何建议或意见!

Sub changeDate()

Dim rng As Range: Set rng = Sheets("Sheet3").Range("starttime")
Dim cel As Range
Dim time2 As String
Dim time1 As String

Sheets("Sheet3").Range("starttime").Activate

For Each cel In rng.Cells
    cel.Select
    time1 = ActiveCell.Value
    time2 = ActiveCell.Offset(1, 0).Value
         If time1 < time2 Then
         '****  use time1 dd/mm/yyyy + time2 hh/mm for value of time2
         End If
         If time1 > time2 Then
         '**** use (time1 dd/mm/yyyy + one day) + time2 hh/mm for value of time2
         End If
Next cel

End Sub

' example of named range starttime 
'02/01/2018 07:25
'00/01/1900 12:28
'00/01/1900 17:38
'00/01/1900 01:01
'00/01/1900 08:07
'00/01/1900 13:22
'00/01/1900 18:33
'00/01/1900 01:45
'00/01/1900 08:47
'00/01/1900 14:20

标签: excelvbadate

解决方案


您可以使用 FIX() 获取任何数字的整数部分,在本例中为日期时间值的日期部分。此外,您应该避免选择单元格,它会减慢代码的执行速度,您甚至不必将临时变量分配给您正在比较的值:

For Each cel In Rng.Cells
    With cel
         If .Value < .Offset(1, 0).Value Then
         '****  use time1 dd/mm/yyyy + time2 hh/mm for value of time2
         ElseIf .Value > Fix(.Offset(1, 0).Value) Then
         '**** use (time1 dd/mm/yyyy + one day) + time2 hh/mm for value of time2
         End If
    End With
Next cel

干杯,迈克尔


推荐阅读