更改具有日期值的单元格以匹配当前日期,但保留原始时间

问题描述 投票:0回答:2

大家下午好!有一个小小的疑问需要您思考。

我目前有 2 张包含上述时间的表格(它们是动态的并且经常变化)。左表提取 08:00 到 18:30 之间的时间数据,右表提取 18:30 到第二天 4:30 之间的时间数据,包括这些时间所附加的日期。当我打开工作簿时,时间通过 VBA 在 WorkBook_Open 上更新,我需要更新显示的时间,以便值保留时间,但将日期更新为当天,因此如果提取的数据是 01/12/2023 12:30,然后单元格更新为 04/12/2023 12:30.....

我用的是公式

cel.Formula = "=TEXT(" & cel & ",""hh:mm"") + Today()"

这似乎适用于当天的所有时间。然而,我面临的问题是,例如在右边的表中... 00:15 值是第二天的值,因此上面的公式会运行并将其转换为当天的时间...例如:

1990年1月1日 21:30 1990/02/01 00:15

但是运行公式会将其更改为:

2023/04/12 21:30 04/12/23023 00:15

最右边的值应该是 05/12/23023 00:15

如果其中任何一个有意义,那么任何帮助将不胜感激,在 Excel 中使用 Times 绝对是我的较弱技能之一

非常感谢:)

excel vba time
2个回答
0
投票

您将使用

"=TEXT(" & cel & ",""hh:mm"")
删除开始日期。这将获取您的日期/时间并在添加今天的日期之前提取时间,这就是两个日期相同的原因。

只需将今天的日期添加到您的原始日期/时间即可。

=A1+TODAY()


Excel 中的时间只是一个数字(我知道我在另一篇文章中说过,但目前找不到)。

小数点之前的部分是日期,小数点之后的部分是时间。今天的日期作为数字是 45264。一天中途或中午是 45264.5,下午 6 点是 45264.75,等等。

因此,如果您输入的时间与不附加日期的时间一样,则实际上是第 0 天:

00/01/1900 18:00
0.75

因此,如果您想更改日期,只需从值中删除整数并添加一个新的:


0
投票
  • 获取今天和
    FIRST_CELL
  • 之间的日期差
  • 使用临时单元格将日期差异存储在
    Demo2
Option Explicit

Sub Demo1()
    Dim c As Range, iOffset As Long
    Const FIRST_CELL = "A1"
    iOffset = Date - CDate(Format(Range(FIRST_CELL), "MM/dd/yyyy"))
    Debug.Print iOffset
    For Each c In Range("A1").CurrentRegion
        c.Value = c.Value + iOffset
    Next
End Sub

Sub Demo2()
    Dim c As Range, iOffset As Long
    Const FIRST_CELL = "A1"
    Const TEMP_CELL = "E1"
    Range(TEMP_CELL) = Date - CDate(Format(Range(FIRST_CELL), "MM/dd/yyyy"))
    Range(TEMP_CELL).Copy
    Range("A1").CurrentRegion.PasteSpecial xlPasteValues, xlPasteSpecialOperationAdd
    Application.CutCopyMode = xlCopy
    Range(TEMP_CELL).ClearContents
End Sub

© www.soinside.com 2019 - 2024. All rights reserved.