我有一个问题,即使其他帖子中提到的很多想法,我也无法弄明白。我的数据来自Excel,以下是任何给定单元格可能拥有数据的每种方式的示例:
4days 4hrs 41mins 29seconds
23hrs 43mins 4seconds
2hrs 2mins
52mins 16seconds
最终结果是计算总分钟数,同时允许忽略秒数,以便先前的值最终如下:
6041
52
1423
122
有人会知道怎么做吗?
感谢您的帮助!
答案 0 :(得分:1)
单点乏味(假设单位总是复数 - 也会产生不同顺序的结果)但是,仅使用公式,如果您的数据位于A列中,则位于B1中并向下复制:
="="&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,"days","*1440+"),"hrs","*60+"),"mins","*1+"),"seconds","*0")," ","")&0
然后复制B并将特殊值粘贴到C中,并使用Tab作为分隔符将文本应用于列到C。
答案 1 :(得分:1)
此数组公式** 也应该有效:
= SUM(IFERROR(0 + MID(REPT("",31)& SUBSTITUTE(A1&" dayhrminsecond","",REPT ("",31)),查找({"日"," hr"," min""第二&# 34;},REPT("",31)& SUBSTITUTE(A1&" dayhrminsecond","",REPT("&#34) ;,31))) - 31,31),0)* {1440,60,1,0})
此致
**数组公式的输入方式与'标准'相同。公式。您只需按住CTRL和SHIFT键,然后按ENTER键,而不是按ENTER键。如果您已正确完成,您会注意到Excel在公式周围放置了大括号{}(尽管不要尝试自己手动插入这些括号)。
答案 2 :(得分:0)
最简单的选项可能是带正则表达式的VBA。然后,您可以轻松找到每个字段,并进行数学运算。
如果你想坚持使用“纯粹的”Excel,那么似乎只有选择是使用SEARCH
或FIND
来查找每个“天”,“小时”的位置,文中的“分钟”(你可能需要检查它们是否总是复数)。然后使用MID
和上面找到的位置来提取不同的组件。有关类似示例,请参阅http://office.microsoft.com/en-gb/excel-help/split-text-among-columns-by-using-functions-HA010102341.aspx。
但是有一些工作要处理缺少某些组件的情况,所以要么你会使用相当多的单元格,所以你会得到一个非常复杂的公式......
答案 3 :(得分:0)
这是一个用VBA编写的用户定义函数,它以字符串作为参数并返回分钟数。只检查时间间隔名称的第一个字符(例如d,h,m),因为这似乎提供了足够的区别。
要输入此用户定义函数(UDF),请打开Visual Basic编辑器。 确保在Project Explorer窗口中突出显示您的项目。 然后,从顶部菜单中选择“插入/模块” 将下面的代码粘贴到打开的窗口中。
要使用此用户定义函数(UDF),请输入类似
的公式= SumMinutes(A1)
在某个单元格中。
Option Explicit
Function SumMinutes(S As String) As Long
Dim RE As Object, MC As Object
Dim lMins As Long
Dim I As Long
Set RE = CreateObject("vbscript.regexp")
With RE
.Pattern = "(\d+)(?=\s*d)|(\d+)(?=\s*h)|(\d+)(?=\s*m)"
.Global = True
.ignorecase = True
If .test(S) = True Then
Set MC = .Execute(S)
For I = 0 To MC.Count - 1
With MC(I)
lMins = lMins + _
.submatches(0) * 1440 + _
.submatches(1) * 60 + _
.submatches(2)
End With
Next I
End If
End With
SumMinutes = lMins
End Function