控制Excel时间格式input/输出
背景:我一直在主持我们当地的慢跑事件大约十年。 我负责处理参加者(姓名,体育俱乐部,围脖号码)的数据分类(年龄段+性别,距离)。 主要任务是收集他们的时间,并处理这些数据(在他们的类别内sorting跑步者等)。 我可以用Excel处理大部分的罚款。
问题:进入参赛者比赛时间的理想时间格式是什么? 时间格式为mm:ss
或(对于较慢的跑步者和/或较长的距离) h:mm:ss
。 Excel似乎没有内置格式的小时字段是可选的。 为了优化我的工作stream程理想情况下,我想有一个单元格格式,使得input47:12
被解释为47分12秒,input1:09:38
被解释为1小时9分38秒。 然而,我发现最适合的单元格格式的Excel将坚持47:12
的input意味着47小时12分钟。 对于超过1小时的时间,我会input1:03:00
如果我的意思是秒字段将保留为零值。
如何让Excel意识到,当格式最多可以处理三个数字作为input时,只有两个数字时才会将它们移动到最后 ?
思考:我“可以”在47分钟和12秒内按0:47:12
键。 但是因为大部分时间都在1小时以内,所以一部分是浪费精力。 而且,使用这种格式,数据与多余的0:
一起显示在屏幕上。 更糟糕的是(IIRC)那些领先的零也出现在印刷版本中,对于初级参与者来说这在短距离内是奇怪的(甚至是侮辱)。
我的黑客:我input时间作为一般数字的mm,ss
格式(在这些部分逗号作为小数点分隔符)。 Excel可以将它们sorting为数字。 然后,我将那个sorting的列的数据复制到另一个“可打印”版本(格式化为文本),其中数据刚刚被复制,但是我手动纠正超过60分钟的时间。 只要我不急(我们的活动并不完全是波士顿马拉松,比方说不到200人),这样做还行,记得要隐藏不应该打印的栏目。 这很烂,当其他官员冲我去拿印刷的结果时,发生了意外。
在你身上 对不起,如果我标记不到最佳(或张贴在错误的网站)。 在SO的第一次海报(虽然在Math.SE老兵)。 我发现的一些相关问题接近,但没有雪茄。
我设法创build了一个小时字段是可选的格式。 它使用条件格式。 首先,将单元格格式化为标准格式,以逗号分隔时间。 之后,为这些单元格创build一个条件格式,它有两个规则:
- 如果单元格> 0.04166667格式hh:mm:ss
- 如果cellvalue <0.04166666格式mm:ss
结果:
47:12
01:09:38
01:00:00
所以你得到你真正想要的,你可以使用原始值进行sorting等等。
编辑:
对于input你需要四个额外的列。 你可以随心所欲地input时间,例如47:12和1:09:38。 在接下来的三列中,您可以以小时,分钟和秒分割这些值,因此解释限制为3小时(03:00),即0.125。
所以,这些是拆分列的公式(您的input在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)
并使用上面的条件格式。
如果您将input您的数据为
`mmm,ss`
其中逗号是小数点,那么你可以用简单的公式把它转换成“Excel Time”
=DOLLARDE(A1,60)/1440
根据需要设置结果的格式。
如果您希望显示的所有内容都是h:mm:ss
则将其用作自定义格式(格式>单元格>数字>自定义types:…)
如果您希望只显示60分钟或更长时间的值,请使用
[<0.0416666666666667]mm:ss;h:mm:ss
为您的单元格的自定义格式。
请注意,秒数必须始终以两位数字input。 换一种说法
6,2 will translate to 6 min 20 sec. 6,02 will translate to 6 min 2 sec
我真的很喜欢上面的IQV的答案,但正如评论部分所指出的那样,数据input端需要前导零。 如果出于某种原因,这是不可接受的,你可以使用下面的丑陋的公式将你用mm,ssinput的时间转换为hh:mm:ss,hh:按要求显示。 不幸的是,它将整个事物转换为文本,这意味着您不能再对其进行math运算。
=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)
有可能有一些更清洁的公式,但这会让你开始。 只需将D2replace为存储时间的位置即可。
再次,我仍然喜欢IQV的答案,因为你可以做更多的时间信息,当它被存储为一个数字而不是文本。
选项2
可以说你把你的数据存储方法改为hhmm,ss在单元格D6中。 你可以拆开这些信息,然后按照下面的方式重新组合。
=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)))
您将需要replace您的列表分隔符,然后将小数点replace为昏迷。