在所有时间格式中,输入12:
都会返回12:00 PM
中午。如果我想要午夜,我可以输入,12:00 a
这需要多敲 4 次键,而且没问题,因为我从来不需要在晚上跟踪时间。然而,当我输入 1:
并返回时,这种常识就被打破了,1:00 AM
出于同样的原因,这是不可以的。
我知道我可以使用军用时间,或者简单地将 A 改为 P。这是我目前的解决方案,但我认为它只是权宜之计。我的目的是学习如何被动地将默认时间更改为 AM 或 PM。
是否有一种看似简单的方法来调整设置中的默认设置?
有没有 VBA/宏可以解决这个问题?我再次寻求被动改变。我不想创建一个热键来将给定单元格中字符串的倒数第二个字符更改为“P”。我希望只要按下回车键,就可以实现这一点。
这个问题纯粹是哲学问题,应该由微软员工来回答,但微软肯定有人建议将 12 点默认为中午,而不是其他时间。为什么他们不将这个想法扩展到其他合理的下午时间,比如中午到下午 5 点或 6 点?
答案1
没有办法调整 AM/PM 的默认值,但有一种简单的方法可以避免这个问题。
解决方法是以 24 小时格式输入日期。
因此对于“下午 1 点”,只需输入“13:”并点击Enter,它将立即转换为“下午 1:00”。
以下 VBA 宏将按照您的要求对第 1 列 (A) 中的所有值执行操作,假设您从不在早上 7 点之前开始工作:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Cells.Count > 1 Then
Exit Sub
End If
If Target.Value = "" Then
Exit Sub
End If
If Target.Column = 1 And Hour(Target.Value) <= 7 Then
Application.EnableEvents = False
Target.Value = TimeSerial(Hour(Target.Value) + 12, Minute(Target.Value), Second(Target.Value))
Application.EnableEvents = True
End If
End Sub
答案2
1- 是否有一种看似简单的方法来调整设置中的默认设置?
不。12:
被解释为12:00 PM
因为时间在午夜结束,就像日期一样。 所以12:
是 是一天中的十二个小时,也就是中午。 同样,3:
是三个小时,或3:00 AM
,并且14:
是十四个小时,或2:00 PM
。 并且边缘情况甚至可以很好地工作,并且0:
都24:
被视为午夜。 任何其他解释在数学上都是复杂的。
2- 有没有 VBA/宏可以解决这个问题?我再次寻求被动改变。我不想创建一个热键来将给定单元格中字符串的倒数第二个字符更改为“P”。我希望只要按下回车键就能发生这种情况。
查看 harrymc 的回答。
3- 这个问题纯粹是哲学问题,应该由微软员工来回答,但微软肯定有人建议将 12 点默认为中午,而不是其他时间。为什么他们不将这个想法扩展到其他合理的下午时间,比如中午到下午 5 点或 6 点?
是的,他们选择12:
默认为中午。其他任何事情都必须编码为特殊情况。我不知道你说的“与其他小时不同”是什么意思。他们这样做是合乎逻辑和一致的。
答案3
如果您想在不同的单元格中输入和显示,您可以使用类似这样的方法。
如果时间从上午开始并在 12 小时内停止,则此方法有效。例如
在单元格 d1 中输入 =TIME(TRUNC(A1/100),MOD(A1,100),)
在单元格 e1 中输入 =IF(A1>B1,TIME(TRUNC((B1+1200)/100),MOD(B1,100),),TIME(TRUNC(B1/100),MOD(B1,100),))
如果时间从中午之后开始,则可以轻松更改它;如果它从上午或下午开始切换,或者如果一天应该超过 12 小时,您可以输入一些内容来覆盖公式。
如果存在最常发生的常见情况,它会比实际输入冒号和上午或下午更容易。