【问题标题】:Controlling Excel time format input/output控制 Excel 时间格式输入/输出
【发布时间】:2018-02-13 16:02:58
【问题描述】:

背景:我已经主持了我们当地的慢跑活动大约十年了。我负责处理参与者的数据(姓名、体育俱乐部、号码布号码),分为他们的类别(年龄组+性别、距离)。主要任务是收集他们的时间,并处理这些数据(在他们的类别中对跑步者进行分类等)。我可以用 Excel 处理这个问题。

问题:输入参赛者比赛时间的理想时间格式是什么?时间格式为mm:ss 或(对于慢跑者和/或更长距离)h:mm:ss。 Excel 似乎没有小时字段是可选的内置格式。为了理想地优化我的工作流程,我希望有一个单元格格式,以便输入 47:12 将被解释为 47 分 12 秒,输入 1:09:38 将被解释为 1 小时 9 分 38 秒。但是,具有我发现的最合适的单元格格式的 Excel 会坚持输入 47:12 表示 47 小时 12 分钟。对于超过 1 小时的时间,我将输入 1:03:00,如果我的意思是秒字段的值为零。

如何让 Excel 意识到当格式最多可以处理三个数字作为输入时,它会在只给定两个数字时将它们移向 end

思考:我“可以”在 47 分 12 秒内输入0:47:12 好吧。但由于大部分时间都在 1 小时以下,这部分是浪费精力。此外,使用这种格式,数据与多余的0: 一起显示在屏幕上。更糟糕的是(IIRC)那些前导零 也出现在印刷版中,对于初级参与者来说,这在较短的距离内是奇怪的(甚至是侮辱性的)。

我的小窍门:我以mm,ss 格式输入时间作为通用数字(在这些部分中,逗号用作小数分隔符)。 Excel 可以将这些排序为数字就好了。然后,我将该排序列的数据复制到另一个“可打印”版本(格式化为文本),其中数据只是被复制,但我手动更正了超过 60 分钟的时间。只要我不着急(我们的活动不完全是波士顿马拉松,比如说,少于 200 名参与者),这工作就很好,并且记得隐藏不应该打印的列。这很笨拙,而且发生了事故,当时其他官员一直在催促我打印结果。

【问题讨论】:

  • 超过一个小时的时间是否记录为hhmm,ss
  • 您可以查看的一个选项是为所有跑步者输入 1 张数据表,然后自动将数据剥离为可打印格式的后续工作表,并将其过滤为您正在寻找的内容。即一张给年轻人,一张给老年人,如果需要,甚至可以按 A、B 和 C 课程分开。
  • @ForwardEd 使用我的 hack 我将其记录为 mmm,ss 所以我将 1 小时 7 分 12 秒记录为 67,12。如果它让生活更轻松,我可以将其记录为“hhmm,ss”,因为这不会影响排序。我也不需要计算时间差、平均速度等。只要排序和输出格式按计划进行,我就会对解决方案感到满意。
  • 是的,我已经为青少年、慢跑者和男/女赛车手准备了单独的床单。以及用于输入时间的主表(按号码布排序)。我在主表中使用一列来指示类别(=课程+性别+年龄段)。

标签: excel time-format


【解决方案1】:

我设法创建了一种格式,其中小时字段 是可选的。它适用于条件格式。首先,您将单元格格式化为标准格式,因此您将时间作为逗号值。之后,您为这些单元格创建一个条件格式,它有两个规则:

  1. 如果单元格值 > 0.04166667 格式 hh:mm:ss
  2. 如果单元格值

结果:
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)

并使用上面的条件格式。

【讨论】:

  • 表示数据输入必须包含0:47:12 时间少于1 小时?
  • @ForwardEd 是的,因为 excel 总是将“nn:nn”形式的输入视为“hh:mm”。您无法使用条件格式更改此行为。
  • 谢谢。所以这控制了显示/输出(需要测试它),但对我的输入问题没有帮助。
  • 我应该研究一下cellvalue和相关函数。因为我的数据中的时间从不小于 3 分钟也不超过 3 小时,我是否可以插入一个步骤,在超过 3 小时时将该数值除以 60?
  • @JyrkiLahtonen 我为时代的输入添加了一个提案。
【解决方案2】:

如果您将输入您的数据

`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

【讨论】:

  • 不错的罗恩,我不知道您可以对 等自定义格式设置约束。很酷!
  • @Forwarded 你也可以根据条件做颜色。当然,Conditional Formatting 更灵活,但这种较旧的方法仍有其用途。在引入 CF 之前使用得更多。
【解决方案3】:

我真的很喜欢 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)))

您需要将列表分隔符替换为 ,然后将逗号替换为小数点。

【讨论】:

  • 谢谢。我需要玩这个想法。它实际上应该有所帮助,因为我可以将条目作为数字输入,然后自动将它们转换为文本(不像我现在那样手动)。
  • 我您将1:27:34 之类的时间存储为127,34 而不是87,34,您可以使用以下过程。检查长度以查看它前面是否为 2 位或更多位,如果是,您将使用 LEFTMIDRIGHT 将其分开,然后将它们放在一个 if 语句中。
  • 我确实将它存储为87,34。这不是问题。
  • 其实是一个小问题... 60.00 的时间并没有按照您想要的方式显示。它是一种特殊情况,可以单独处理。 hrmm我要冲刺去上班,但是0秒结束的情况需要调整……你会记录超过1秒的精度吗?即,89,125
猜你喜欢
  • 1970-01-01
  • 2020-02-07
  • 2012-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-15
  • 2013-11-19
  • 2010-11-29
相关资源
最近更新 更多