在Excel中计算字母数字string为整数

我有一个问题,即使在其他文章中提出的许多想法,我也无法弄清楚。 我的数据来自Excel,下面是任何给定单元格可能有数据的每种方式的示例:

4days 4hrs 41mins 29seconds 23hrs 43mins 4seconds 2hrs 2mins 52mins 16seconds 

最终的结果是计算总分钟数,同时允许秒数被忽略,以便以前的值最终将如下所示:

 6041 52 1423 122 

谁会有一个想法如何去做呢?

感谢您的帮助!

比较单调(假设单位总是复数 – 也以不同的顺序产生结果),但是只有公式,如果你的数据在B1列的A列中并且被拷贝下来:

 ="="&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,"days","*1440+"),"hrs","*60+"),"mins","*1+"),"seconds","*0")," ","")&0 

然后复制B并将特殊值粘贴到C中,并使用Tab作为分隔符将文本应用到C到C中。

这个数组公式**也应该工作:

= SUM(IFERROR(0 + MID(REPT(“”,31)&SUBSTITUTE(A1&“dayhrminsecond”,“”,REPT(“”,31)),FIND({“day”,“hr”,“min” (“”,31)&SUBSTITUTE(A1&“dayhrminsecond”,“”,REPT(“”,31))) – 31,31),0)* {1440,60,1,0})

问候

**数组公式不是以与“标准”公式相同的方式input的。 按住CTRL键和SHIFT键,而不是按下ENTER键,然后按ENTER键。 如果你做得对,你会注意到Excel在公式周围放置了大括号(尽pipe不要试图自己手动插入这些)。

最简单的select可能是正则expression式的VBA。 你可以很容易find每个领域,并做math。

如果你想坚持“纯粹”的Excel,那么它似乎只有select是使用SEARCHFIND文本中的每个“天”,“小时”,“分钟”的位置(你可能不得不检查他们是否总是复数)。 然后使用上面find的位置MID来提取不同的组件。 请参阅http://office.microsoft.com/en-gb/excel-help/split-text-among-columns-by-using-functions-HA010102341.aspx以获取类似示例。

但是在处理一些组件丢失的情况下还有很多工作要做,所以要么使用相当多的单元,这样就会得到一个非常复杂的公式。

这是一个用VBA编写的用户定义函数,它将你的string作为参数并返回分钟数。 只有时间间隔名称的第一个字符被检查(例如d,h,m),因为这似乎提供了足够的区分。

要input这个用户定义函数(UDF),打开Visual Basic编辑器。 确保您的项目在“项目浏览器”窗口中突出显示。 然后,从顶部菜单中select插入/模块,然后将下面的代码粘贴到打开的窗口中。

要使用这个用户定义函数(UDF),input一个像

= 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