大家下午好!有一个小小的疑问需要您思考。
我目前有 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 绝对是我的较弱技能之一
非常感谢:)
您将使用
"=TEXT(" & cel & ",""hh:mm"")
删除开始日期。这将获取您的日期/时间并在添加今天的日期之前提取时间,这就是两个日期相同的原因。
只需将今天的日期添加到您的原始日期/时间即可。
=A1+TODAY()
Excel 中的时间只是一个数字(我知道我在另一篇文章中说过,但目前找不到)。
小数点之前的部分是日期,小数点之后的部分是时间。今天的日期作为数字是 45264。一天中途或中午是 45264.5,下午 6 点是 45264.75,等等。
因此,如果您输入的时间与不附加日期的时间一样,则实际上是第 0 天:
00/01/1900 18:00
或 0.75
因此,如果您想更改日期,只需从值中删除整数并添加一个新的:
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