公式适用于hh:mm:ss格式的单元格,但相同的公式在mm:ss格式的单元格中给出不正确的值

时间:2014-02-11 02:23:49

标签: excel

我的数据显示为此

WAIT
29:45:00
2:41:14
46:06:00 ' <---
0:25
19:23 ' <---
2:25:12
37:36:00
2:12:24
1:34:35
1:54:13
13:00:53

当我将公式= HOUR(F7)* 3600 + MINUTE(F7)* 60 + SECOND(F7)应用到46:06:00时,它会给出正确的答案,但是当相同的公式应用于19时:23,excel以HHMMSS格式识别19:23,但它是MMSS ... 我有一个庞大的数据库,我很难手动更改它.... 请帮忙......

4 个答案:

答案 0 :(得分:1)

默认情况下,Excel将格式为xx:xx或x:xx的数字视为h:mm,而不是mm:ss。

我没有看到将值转换为有效hh:mm:ss的方法,因为Excel没有句柄来确定哪个数字缺少小时部分。

最佳选择是更改写入数据的例程,并将小时输入为00:mm:ss值之前。

答案 1 :(得分:1)

只要数据列格式化为文本,您就可以测试字符串中存在多少冒号并根据是否有1或2应用不同的计算。如果只有1个冒号,则使用Excel认为的内容是作为分钟的小时数,以及Excel认为的分钟数是秒。

=IF(LEN(F7)-LEN(SUBSTITUTE(F7,":",""))=2,HOUR(F7)*3600+MINUTE(F7)*60+SECOND(F7),HOUR(F7)*60+MINUTE(F7))

答案 2 :(得分:0)

很难判断您的数据是否为文本格式 - HOUR/MINUTE/SECOND函数在文本格式化的时间和实时一样有效。你对这个公式有什么结果?

=ISNUMBER(F7)

如果这给你假,那么你的“时间”是文本格式,在这种情况下,这个公式将给你总秒数:

=LOOKUP(999,({"","0:"}&F7)+0)*86400

将结果单元格格式化为常规

根据需要将19:23解释为19分23秒。对于46:06:00,您将获得结果165960,即46小时6分钟内的总秒数。如果pnuts指出,你的公式只给出了24小时的倍数后剩下的秒数。那是因为

=HOUR("46:06:00") = <强> 22

如果您希望结果为79560,那么您可以添加MOD这样的功能:

=MOD(LOOKUP(999,({"","0:"}&F7)+0),1)*86400

LOOKUP函数在这里工作,因为它利用了将“0:”连接到19:23的开头(然后进行类似+0的计算)的事实转换19:23(19小时23分钟)到0:19:23(零小时,19分钟,23秒)但是连接0:到46:06:00然后加0会给你一个错误。

答案 3 :(得分:0)

Guyz,回答这个问题。 这是我试过的 -

首先我申请了 = TEXT(D2,“hh:mm:ss”)公式到单元格值然后使用= IFERROR(SUMPRODUCT((“00:”&amp; d2)+0),d2),所以19:23变为00 :19:23 ..

虽然我必须对数据进行一些手工操作...