使用宏复制时如何修改日期?

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

【讨论】:

非常感谢!我对此很陌生,因此是非常基本的错误。我可能需要一些时间来破译所有内容,但我感谢您的帮助!顺便说一句,我读过答案最有趣的哈哈享受烧烤!

以上是关于使用宏复制时如何修改日期?的主要内容,如果未能解决你的问题,请参考以下文章

怎样用宏程序连接两个程序

修改该程序,但不允许对main()做任何修改,不能用宏定义

怎样用宏把EXCEL里C列的数据全部自动导出保存为CSV格式?

如何正确使用const(常量),define(宏)

用内联取代宏代码

内联函数和宏比较