在Excel中提取和求和数字子string

我不认为你可以在Excel本地做正则expression式,我得到的印象,这将需要一些VBScript,我不知道。

我有一个数据集,其中包含给定列中的以下格式的string

123 foo, 234-bar, 345 baz , ... 

我想提取在每个逗号分隔的logging开始的数字, 并将他们在另一列。

如果我们在逗号分割string,并考虑子string,我认为这将足以作为一个正则expression式

 ^\D*?(\d+)?\D*/ 

(只有多个数字中的第一个应该被考虑,并且一个无数的string应该提取空白并且被认为是零)。

这是一些样本数据的预期输出

 INPUT OUTPUT ------------------------------------- 5-foo, 10 bar 15 11 baz, 11 bad,string 0 hello,123,100, 100 ,xxx 323 

我如何让Excel执行这个计算?

要在Excel / VBA中使用VBScript RegExps,请按照simoco 回答详细描述的方法在“Microsoft VBScript Regular Expressions 5.5”(版本可能会更改)中添加引用。

要从string中总结数字序列,请使用“\ d +”之类的简单模式。

证据:

 Option Explicit Dim aTests : aTests = Array(_ Array("5-foo, 10 bar", 15) _ , Array("11 baz", 11) _ , Array("bad,string", 0) _ , Array("hello,123,100, 100 ,xxx", 323) _ ) Dim reNum : Set reNum = New RegExp reNum.Global = True reNum.Pattern = "\d+" Dim aTest, nSum, oMTS, oMT For Each aTest In aTests Set oMTS = reNum.Execute(aTest(0)) nSum = 0 For Each oMT In oMTS nSum = nSum + CLng(oMT.Value) Next WScript.Echo qq(aTest(0)), nSum, CStr(nSum = aTest(1)) Next Function qq(s) : qq = """" & s & """" : End Function 

输出:

 cscript 22861549.vbs "5-foo, 10 bar" 15 True "11 baz" 11 True "bad,string" 0 True "hello,123,100, 100 ,xxx" 323 True 

(正则expression式的存在使困难的事情变得简单,反之亦然)