我有一个Excel 2010工作簿,其中包含一个值为9876:54:32
(手动输入)的单元格,代表9876小时,54分钟和32秒的电话通话时间。
然后我有一个值为1000
(手动输入)代表1000个电话的单元格。
我想将值除以每次通话的平均通话时间为592.615分钟。
我正在做一个常规= A1 / B1并且它给我一个错误。
*已编辑*
感谢Brain Webster纠正我的数学。我的意思是9.876小时。但重点是Excel给了我一个错误,而不是我的手工数学。玩弄它我发现Excel对我来说很好,价值高达9999:59:59
。一旦我尝试使用10000:00:00及以上,它就不会将其识别为时间值。
答案 0 :(得分:2)
我喜欢这些看似简单的谜语,所以这是我作为公式和VBA尝试的解决方案:
我原来的:
= (LINKS(A38;FINDEN(":";A38)-1)/24)+ZEITWERT("0"&RECHTS(A38;LÄNGE(A38)-FINDEN(":";A38)+1))
翻译:
= (LEFT(A38,FIND(":",A38)-1)/24)+TIMEVALUE("0"&RIGHT(A38,LEN(A38)-FIND(":",A38)+1))
这将为您提供持续时间给定10k文本的正确值。您只需要将单元格的格式设置为[h]:mm:ss
。然后这些值看起来是一样的,但是一个是字符串,另一个是数字 - 这是一个主要区别;)
在vba中它看起来更容易,一旦定义,你就可以将它用作工作表函数。
Public Function GetDurationValue(ByVal strInput As String) As Double
Dim arrResult As Variant
arrResult = Split(strInput, ":") 'saves you parsing
GetDurationValue = (arrResult(0) / 24) + _
TimeSerial(0, arrResult(1), arrResult(2))
End Function
A38 = "10971:12:14"
=GetDurationValue(A38)
=457.13349537037
答案 1 :(得分:1)
你可以使用LEFT和RIGHT函数来检索部分时间值,然后将这些值相加并乘以60 [分钟](分别为3600 [小时])。
小时,分钟,秒(A1是具有时间值的单元格)的类似内容:
B1=VALUE(LEFT(A1;FIND(":";A1)))*3600
B2=VALUE(LEFT(A1;FIND(":";A1; FIND(":";A1))))*60
B3=VALUE(LEFT(A1;FIND(":";A1; FIND(":";A1; FIND(":";A1)))))
现在你可以总结一下:
C1=SUM(B1;B2;B3)
然后通过呼叫计数潜水(A2是具有呼叫计数的小区):
D1=C1/A2
最后将其格式化为时间:
E1=TEXT(D1/(24*3600);"d \day\s hh:mm:ss")
BTW:我在Excel 2013中尝试过,当我将111:22:33输入一个单元格时,它会自动转换为时间。那么我可以像你一样分开它......
答案 2 :(得分:1)
似乎小时> Excel不会识别10000。因此,我们需要引入IF()
以确定是否是这种情况,并确定小时> 10000
=IF(ISERROR(FIND(":",A2)),A2/B2, <SCRIPT IN CASE OF >10000>)
<SCRIPT IN CASE OF >10000>
现在将成为:
VALUE(LEFT(A2,FIND(":",A2)))/24+VALUE(LEFT(A2,FIND(":",A2, FIND(":",A2))))/(24*60)+VALUE(LEFT(A2,FIND(":",A2, FIND(":",A2,FIND(":",A2)))))*(24*60*60)
结合并享受!
答案 3 :(得分:1)
假设您在A1中的时间不超过100,000
小时,并且您始终显示小时,分钟和秒,那么此公式就足够了
=IFERROR(A1/B1,(LEFT(A1)*10000/24+RIGHT(A1,10))/B1)
将结果单元格格式化为[h]:mm:ss以将结果作为时间值
A1中的10971:12:14
和B1中的1000
应该提供10:58:16
的结果[或格式化结果单元格为[m]:ss
,以获得像{{1}的分钟和秒}}]
此版本可以使用任意数小时,有或没有秒
658:16