在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式的存在使困难的事情变得简单,反之亦然)