控制 Excel 时间格式 input/output
Controlling Excel time format input/output
背景:我主持我们当地的慢跑活动已有大约十年了。我负责处理分为类别(年龄段+性别、距离)的参与者数据(姓名、运动俱乐部、号码布)。主要任务是收集他们的时间,并处理该数据(在他们的类别中对跑步者进行排序等)。我可以用 Excel 来处理这个问题。
问题:输入参赛者比赛时间的理想时间格式是什么?时间的格式为 mm:ss
或(对于较慢的跑步者 and/or 更长的距离)h:mm:ss
。 Excel 似乎没有小时字段可选的内置格式。为了理想地优化我的工作流程,我希望有一个单元格格式,这样输入
47:12
要解释为47分12秒,输入1:09:38
要解释为1小时9分38秒。但是,Excel 与我找到的最合适的单元格格式一样,会坚持输入 47:12
表示 47 小时 12 分钟。对于超过 1 小时的时间,我会输入 1:03:00
如果我的意思是秒字段的值为零。
How to make Excel realize that when the format can handle up to three numbers as inputs, it would, when given only two numbers, move them towards the end?
思路:我"can"键在47分12秒为0:47:12
没事。但是因为大多数时间都在 1 小时以下,所以这部分是浪费了精力。此外,使用这种格式,数据与多余的 0:
一起显示在屏幕上。更糟糕的是 (IIRC) 那些前导零
也出现在印刷版本中,这对于初级参与者来说在较短的距离内很奇怪(甚至是侮辱)。
我的技巧: 我以 mm,ss
格式输入时间作为一般数字(在这些部分中,逗号用作小数点分隔符)。 Excel 可以将它们排序为数字就好了。然后我将该排序列的数据复制到另一个 "printable" 版本(格式为文本),其中数据只是被复制,但我手动更正了超过 60 分钟的时间。只要我不着急(我们的活动不完全是波士顿马拉松,比方说,参与者少于 200 人),这就很好用,并且记得隐藏不应该打印的列。这很糟糕,而且发生了事故,当时其他官员一直在催促我打印结果。
我设法创建了一种格式,其中小时字段 是可选的。它适用于条件格式。首先,您将单元格设置为标准格式,这样您就可以将时间设置为逗号值。之后,您为这些单元格创建一个条件格式,它有两个规则:
- 如果单元格值 > 0.04166667 格式 hh:mm:ss
- 如果单元格值 < 0.04166666 格式 mm:ss
结果:
47:12
01:09:38
01:00:00
所以你得到了你真正想要的,你可以使用原始值进行排序等等。
编辑:
对于输入,您需要另外四列。您可以根据需要输入时间,例如47:12 和 1:09:38。在接下来的三列中,您将这些值拆分为小时、分钟和秒,其中解释限制为 3 小时 (03:00),即 0.125。
因此,这些是拆分列的公式(您的输入在 B1 中):
小时数:=IF(B1>0.125,0,HOUR(B1))
分钟:=IF(B1>0.125,INT(B1)*24+HOUR(B1),MINUTE(B1))
秒数:=IF(B1>0.125,MINUTE(B1),SECOND(B1))
最后,您将所有值放在第四列中:
=TIME(C1,D1,E1)
并使用上面的条件格式。
我非常喜欢 IQV 上面的回答,但正如评论部分所指出的,数据输入端需要前导零。如果出于某种原因这是不可接受的,您可以使用以下丑陋的公式将您在通常的 mm,ss 方法中输入的时间转换为 hh:mm:ss,并根据需要显示 hh:。不幸的是,它会将整个内容转换为文本,这意味着您无法再对其执行数学运算。
=IF(FIND(".",MOD(D2,60)&".")=2,"0","")&MOD(D2,60)
并且由于您使用 , 作为小数点分隔符,因此公式将变为:
IF(FIND(",",MOD(D2,60)&",")=2,"0","")&MOD(D2,60)
如果你使用;作为您的列表分隔符,那么您的公式变为
IF(FIND(",";MOD(D2;60)&",")=2;"0";"")&MOD(D2;60)
可能有一些更简洁的公式,但这将帮助您入门。只需将 D2 替换为您存储时间的位置即可。
同样,我仍然更喜欢 IQV 的回答,因为当时间信息存储为数字而不是文本时,您可以对时间信息做更多的事情。
选项 2
假设您将单元格 D6 中的数据存储方法更改为 hhmm,ss。您可以拆分信息并将其重新组合成显示友好的版本,如下所示。
=IF(FIND(".",D6)<=3,LEFT(D6,2)&":"&RIGHT(D6,LEN(D6)-FIND(".",D6)),LEFT(D6,FIND(".",D6)-3)&":"&MID(D6,FIND(".",D6)-2,2)&":"&RIGHT(D6,LEN(D6)-FIND(".",D6)))
您需要用列表分隔符代替 ,然后用逗号代替小数点。
如果您输入的数据为
`mmm,ss`
其中逗号是小数点,那么可以用简单的公式将其转换为"Excel Time":
=DOLLARDE(A1,60)/1440
根据需要格式化结果。
如果您希望所有内容都显示为 h:mm:ss
,则将其用作您的自定义格式(格式 > 单元格 > 数字 > 自定义类型:...)
如果您希望 h
仅显示 60 分钟或更长的值,请使用
[<0.0416666666666667]mm:ss;h:mm:ss
用于单元格的自定义格式。
请注意,秒数必须始终以两位数字输入。也就是说
6,2 will translate to 6 min 20 sec.
6,02 will translate to 6 min 2 sec
背景:我主持我们当地的慢跑活动已有大约十年了。我负责处理分为类别(年龄段+性别、距离)的参与者数据(姓名、运动俱乐部、号码布)。主要任务是收集他们的时间,并处理该数据(在他们的类别中对跑步者进行排序等)。我可以用 Excel 来处理这个问题。
问题:输入参赛者比赛时间的理想时间格式是什么?时间的格式为 mm:ss
或(对于较慢的跑步者 and/or 更长的距离)h:mm:ss
。 Excel 似乎没有小时字段可选的内置格式。为了理想地优化我的工作流程,我希望有一个单元格格式,这样输入
47:12
要解释为47分12秒,输入1:09:38
要解释为1小时9分38秒。但是,Excel 与我找到的最合适的单元格格式一样,会坚持输入 47:12
表示 47 小时 12 分钟。对于超过 1 小时的时间,我会输入 1:03:00
如果我的意思是秒字段的值为零。
How to make Excel realize that when the format can handle up to three numbers as inputs, it would, when given only two numbers, move them towards the end?
思路:我"can"键在47分12秒为0:47:12
没事。但是因为大多数时间都在 1 小时以下,所以这部分是浪费了精力。此外,使用这种格式,数据与多余的 0:
一起显示在屏幕上。更糟糕的是 (IIRC) 那些前导零
也出现在印刷版本中,这对于初级参与者来说在较短的距离内很奇怪(甚至是侮辱)。
我的技巧: 我以 mm,ss
格式输入时间作为一般数字(在这些部分中,逗号用作小数点分隔符)。 Excel 可以将它们排序为数字就好了。然后我将该排序列的数据复制到另一个 "printable" 版本(格式为文本),其中数据只是被复制,但我手动更正了超过 60 分钟的时间。只要我不着急(我们的活动不完全是波士顿马拉松,比方说,参与者少于 200 人),这就很好用,并且记得隐藏不应该打印的列。这很糟糕,而且发生了事故,当时其他官员一直在催促我打印结果。
我设法创建了一种格式,其中小时字段 是可选的。它适用于条件格式。首先,您将单元格设置为标准格式,这样您就可以将时间设置为逗号值。之后,您为这些单元格创建一个条件格式,它有两个规则:
- 如果单元格值 > 0.04166667 格式 hh:mm:ss
- 如果单元格值 < 0.04166666 格式 mm:ss
结果:
47:12
01:09:38
01:00:00
所以你得到了你真正想要的,你可以使用原始值进行排序等等。
编辑:
对于输入,您需要另外四列。您可以根据需要输入时间,例如47:12 和 1:09:38。在接下来的三列中,您将这些值拆分为小时、分钟和秒,其中解释限制为 3 小时 (03:00),即 0.125。
因此,这些是拆分列的公式(您的输入在 B1 中):
小时数:=IF(B1>0.125,0,HOUR(B1))
分钟:=IF(B1>0.125,INT(B1)*24+HOUR(B1),MINUTE(B1))
秒数:=IF(B1>0.125,MINUTE(B1),SECOND(B1))
最后,您将所有值放在第四列中:
=TIME(C1,D1,E1)
并使用上面的条件格式。
我非常喜欢 IQV 上面的回答,但正如评论部分所指出的,数据输入端需要前导零。如果出于某种原因这是不可接受的,您可以使用以下丑陋的公式将您在通常的 mm,ss 方法中输入的时间转换为 hh:mm:ss,并根据需要显示 hh:。不幸的是,它会将整个内容转换为文本,这意味着您无法再对其执行数学运算。
=IF(FIND(".",MOD(D2,60)&".")=2,"0","")&MOD(D2,60)
并且由于您使用 , 作为小数点分隔符,因此公式将变为:
IF(FIND(",",MOD(D2,60)&",")=2,"0","")&MOD(D2,60)
如果你使用;作为您的列表分隔符,那么您的公式变为
IF(FIND(",";MOD(D2;60)&",")=2;"0";"")&MOD(D2;60)
可能有一些更简洁的公式,但这将帮助您入门。只需将 D2 替换为您存储时间的位置即可。
同样,我仍然更喜欢 IQV 的回答,因为当时间信息存储为数字而不是文本时,您可以对时间信息做更多的事情。
选项 2
假设您将单元格 D6 中的数据存储方法更改为 hhmm,ss。您可以拆分信息并将其重新组合成显示友好的版本,如下所示。
=IF(FIND(".",D6)<=3,LEFT(D6,2)&":"&RIGHT(D6,LEN(D6)-FIND(".",D6)),LEFT(D6,FIND(".",D6)-3)&":"&MID(D6,FIND(".",D6)-2,2)&":"&RIGHT(D6,LEN(D6)-FIND(".",D6)))
您需要用列表分隔符代替 ,然后用逗号代替小数点。
如果您输入的数据为
`mmm,ss`
其中逗号是小数点,那么可以用简单的公式将其转换为"Excel Time":
=DOLLARDE(A1,60)/1440
根据需要格式化结果。
如果您希望所有内容都显示为 h:mm:ss
,则将其用作您的自定义格式(格式 > 单元格 > 数字 > 自定义类型:...)
如果您希望 h
仅显示 60 分钟或更长的值,请使用
[<0.0416666666666667]mm:ss;h:mm:ss
用于单元格的自定义格式。
请注意,秒数必须始终以两位数字输入。也就是说
6,2 will translate to 6 min 20 sec.
6,02 will translate to 6 min 2 sec