小时为零时的vba增量日期

时间:2017-11-28 13:53:22

标签: excel vba date time

我试图在谷歌和StackOverflow中查看arround,但我似乎无法将代码粘合在一起以达到我的目的。 我正在使用2列。第一个输入日期(dd-mm-yyyy)第二个输入时间(00:00:00)。我已经找到了如何每15分钟增加一次的时间,但现在我遇到的问题是我的约会时间可能会在00:00:00时改变。因此,为此,代码需要查看B列。 所以在我的时间里,我有这个:

Sub AutomateTimeSeries
    range("B5").Select        
    ActiveCell.FormulaR1C1 = "=R[-1]C + ""00:15"""                
    Selection.AutoFill
    Destination:=range("B5:B2980"), Type:=xlFillDefault    -   
    range("A4").Select  
End Sub

所以现在我需要在B列中查看“00:00:00”。如果我在细胞中找到它,例如B98我需要跳上A98并将日期更改为之前的+1。为此,我需要在前面的单元格中有一个日期。用户将在第一个呈现的单元格中填写日期。从那里开始宏将填充A列中具有此日期的所有单元格。我已经使用了宏的这一部分:

Selection.AutoFill Destination:=range("A4:A2980"), Type:=xlFillCopy

这有效但我需要更改包含00:00:00的B-cell旁边的特定A-cell中的单元格。我怎么能这样做?或者是否有更好的方法来使用日期时间增加。

从我尝试使用的找到的单元格左转:

Sub IncreaseDate()

    Dim a_lastrow As Integer     'last row of column A
    Dim b_lastrow As Integer     'last row of column B
    Dim ws As Worksheet

    Set ws = Workbook.Worksheets("Sheet1")

    With ws
        a_lastrow = .Range("A3000").End(xlUp).Row
        b_lastrow = .Range("B3000").End(xlUp).Row

        For r = 1 To a_lastrow
            If Application.WorksheetFunction.CountIf(.Range("B1:B" & b_lastrow), .Range("B" & r).Value) = "00:00:00" Then
                .Range("A" & r).Value = "previous date + 1 day"  '<==what's the code for this??????
            End If
        Next r
    End With

    MsgBox ("done")

    If (Target.Column = 2) Then    'check if in 2nd column
        If Target.Offset(, -1).Value = "" Then    'Check if there is already a value in Column A
            Target.Offset(, -1).Value = Date     ' No value, lets stick in the current system date
        End If
    End If

    SAS DateLiteral
    DateAdd


End Sub

所以看起来应该是这样的:

1/01/2017   23:15:00
1/01/2017   23:30:00
1/01/2017   23:45:00
2/01/2017   0:00:00
2/01/2017   0:15:00
2/01/2017   0:30:00
2/01/2017   0:45:00....

有人有想法吗?

1 个答案:

答案 0 :(得分:0)

如评论中所述 - 这可以通过公式和数字格式来完成(下面的代码只是添加了公式和数字格式)。

使用您的第一段代码作为模板,这将在B5:C2980之间自动填充 只需在单元格B4中添加第一个所需日期,B5中的公式将在15分钟后计算。

另请注意 - 没有选择单元格。您只需使用该单元格 - 无需先选择它。

Sub AutomateTimeSeries()

    With ThisWorkbook.Worksheets("Sheet1")
        With .Range("B5")
            .FormulaR1C1 = "=SUM(R[-1]C,""00:15"")"
            .NumberFormat = "dd/mm/yyyy"
        End With
        With .Range("C5")
            .FormulaR1C1 = "=RC[-1]"
            .NumberFormat = "hh:mm:ss"
        End With

        .Range("B5:C5").AutoFill Destination:=.Range("B5:C2980")

    End With

End Sub