使用宏复制时如何修改日期?
How to modify date when copying using a macro?
我正在 VBA 中编写宏。我有一个循环遍历日期列表和每个条目,其中分钟是 00,15.30.45
它将日期和时间复制到一个新列中。这只是我正在处理的代码的一部分,所以这就是为什么它现在看起来毫无意义。我的麻烦是我需要修改复制到新列中的时间。我需要日期保持不变,但必须修改时间,以便:
hh:00 becomes hh-1:45
hh:15 becomes hh :00
hh:30 becomes hh :15
hh:45 becomes hh :30
我有下面的当前代码,一切正常,但显然它不会修改时间,因为我只是为了理解我想做的事情而编造的。修改小时和分钟需要什么代码?谢谢!
Dim X As Integer
Range("A2").Select
NumRows = Range(Selection, Selection.End(xlDown)).Rows.Count
Range("A2").Select
For X = 2 To NumRows
If (Minute(ActiveCell.Value) = 0) Then
Range("D2").Value = ActiveCell.Value
Range("D2").NumberFormat = "YYYY-MM-DD HH-1:45"
ElseIf (Minute(ActiveCell.Value) = 15) Then
Range("D2").Value = ActiveCell.Value
Range("D2").NumberFormat = "YYYY-MM-DD HH:00"
ElseIf (Minute(ActiveCell.Value) = 30) Then
Range("D2").Value = ActiveCell.Value
Range("D2").NumberFormat = "YYYY-MM-DD HH:15"
ElseIf (Minute(ActiveCell.Value) = 45) Then
Range("D2").Value = ActiveCell.Value
Range("D2").NumberFormat = "YYYY-MM-DD HH:30"
End If
Selection.Offset(1, 0).Select
Next X
我在 bar-b-que (Happy 4th of JULY EVERYONE),这似乎比这里的客人更有趣。
所以要像您知道的那样添加时间,您可能应该使用 TimeSerial Function。我试图修改您的代码以执行您所说的操作,但说实话,在 bar-b-Q 期间很难做到。
一些建议。
- Don't use select
- Don't use Integer
- 将日期增加 4 小时 3 分 8 秒....
TimeSerial(4, 3, 8)
以下是我尝试更改您的代码以获得您想要的内容的方法。你应该能够推断出我的意思。
Sub Running_From_That_Water_Like_My_Name_Was_TedKennedy()
Dim X As Long, WSheet As Worksheet, increaseAMOUNT As Double
Set WSheet = ActiveSheet '<---- make sure this is correct
With WSheet
Dim aCell As Range: Set aCell = .Range("A2")
Dim increaseAMOUNT As Double: increaseAMOUNT = TimeSerial(0, 15, 0) 'this adds `15 minutes
For X = 2 To Range(Range("A2"), Range("A2").End(xlDown)).Rows.Count
If (Minute(ActiveCell.Value) = 0) Then
Range("D2").Value = aCell.Value + increaseAMOUNT '<----you can modify the amount to increase consistently or include your own TimeSerial
Range("D2").NumberFormat = "YYYY-MM-DD HH-1:45"
ElseIf (Minute(aCell.Value) = 15) Then
Range("D2").Value = aCell.Value + increaseAMOUNT
Range("D2").NumberFormat = "YYYY-MM-DD HH:00"
ElseIf (Minute(aCell.Value) = 30) Then
Range("D2").Value = aCell.Value + increaseAMOUNT
Range("D2").NumberFormat = "YYYY-MM-DD HH:15"
ElseIf (Minute(aCell.Value) = 45) Then
Range("D2").Value = aCell.Value + increaseAMOUNT
Range("D2").NumberFormat = "YYYY-MM-DD HH:30"
End If
Set aCell = aCell.Offset(1, 0)
Next X
End With
End Sub
'People-I-know.Girls.Count = 0
我正在 VBA 中编写宏。我有一个循环遍历日期列表和每个条目,其中分钟是 00,15.30.45
它将日期和时间复制到一个新列中。这只是我正在处理的代码的一部分,所以这就是为什么它现在看起来毫无意义。我的麻烦是我需要修改复制到新列中的时间。我需要日期保持不变,但必须修改时间,以便:
hh:00 becomes hh-1:45
hh:15 becomes hh :00
hh:30 becomes hh :15
hh:45 becomes hh :30
我有下面的当前代码,一切正常,但显然它不会修改时间,因为我只是为了理解我想做的事情而编造的。修改小时和分钟需要什么代码?谢谢!
Dim X As Integer
Range("A2").Select
NumRows = Range(Selection, Selection.End(xlDown)).Rows.Count
Range("A2").Select
For X = 2 To NumRows
If (Minute(ActiveCell.Value) = 0) Then
Range("D2").Value = ActiveCell.Value
Range("D2").NumberFormat = "YYYY-MM-DD HH-1:45"
ElseIf (Minute(ActiveCell.Value) = 15) Then
Range("D2").Value = ActiveCell.Value
Range("D2").NumberFormat = "YYYY-MM-DD HH:00"
ElseIf (Minute(ActiveCell.Value) = 30) Then
Range("D2").Value = ActiveCell.Value
Range("D2").NumberFormat = "YYYY-MM-DD HH:15"
ElseIf (Minute(ActiveCell.Value) = 45) Then
Range("D2").Value = ActiveCell.Value
Range("D2").NumberFormat = "YYYY-MM-DD HH:30"
End If
Selection.Offset(1, 0).Select
Next X
我在 bar-b-que (Happy 4th of JULY EVERYONE),这似乎比这里的客人更有趣。
所以要像您知道的那样添加时间,您可能应该使用 TimeSerial Function。我试图修改您的代码以执行您所说的操作,但说实话,在 bar-b-Q 期间很难做到。
一些建议。
- Don't use select
- Don't use Integer
- 将日期增加 4 小时 3 分 8 秒....
TimeSerial(4, 3, 8)
以下是我尝试更改您的代码以获得您想要的内容的方法。你应该能够推断出我的意思。
Sub Running_From_That_Water_Like_My_Name_Was_TedKennedy()
Dim X As Long, WSheet As Worksheet, increaseAMOUNT As Double
Set WSheet = ActiveSheet '<---- make sure this is correct
With WSheet
Dim aCell As Range: Set aCell = .Range("A2")
Dim increaseAMOUNT As Double: increaseAMOUNT = TimeSerial(0, 15, 0) 'this adds `15 minutes
For X = 2 To Range(Range("A2"), Range("A2").End(xlDown)).Rows.Count
If (Minute(ActiveCell.Value) = 0) Then
Range("D2").Value = aCell.Value + increaseAMOUNT '<----you can modify the amount to increase consistently or include your own TimeSerial
Range("D2").NumberFormat = "YYYY-MM-DD HH-1:45"
ElseIf (Minute(aCell.Value) = 15) Then
Range("D2").Value = aCell.Value + increaseAMOUNT
Range("D2").NumberFormat = "YYYY-MM-DD HH:00"
ElseIf (Minute(aCell.Value) = 30) Then
Range("D2").Value = aCell.Value + increaseAMOUNT
Range("D2").NumberFormat = "YYYY-MM-DD HH:15"
ElseIf (Minute(aCell.Value) = 45) Then
Range("D2").Value = aCell.Value + increaseAMOUNT
Range("D2").NumberFormat = "YYYY-MM-DD HH:30"
End If
Set aCell = aCell.Offset(1, 0)
Next X
End With
End Sub
'People-I-know.Girls.Count = 0