使用宏复制时如何修改日期?
Posted
技术标签:
【中文标题】使用宏复制时如何修改日期?【英文标题】:How to modify date when copying using a macro? 【发布时间】:2019-07-04 19:26:41 【问题描述】:我正在用 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
【问题讨论】:
所有时间都是刻钟吗?如果是这样,只需从每个时间值中减去 15 分钟。 @RonRosenfeld 这就是我想做的就是从每个值中减去 15 分钟,但这就是我需要帮助的地方。 只要使用Range("D2").Value = dateadd("s",-15,Range("D2").value)
@RonRosenfeld 谢谢你!正是我想要的!
【参考方案1】:
我在一家酒吧 (Happy 4th of JULY EVERYONE),这似乎比这里的客人更有趣。
因此,要像您所知道的 inutes 一样添加时间,您可能应该使用 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
【讨论】:
非常感谢!我对此很陌生,因此是非常基本的错误。我可能需要一些时间来破译所有内容,但我感谢您的帮助!顺便说一句,我读过答案最有趣的哈哈享受烧烤!以上是关于使用宏复制时如何修改日期?的主要内容,如果未能解决你的问题,请参考以下文章