在Excel中提取和求和数字子字符串

时间:2014-04-04 11:27:32

标签: regex excel vbscript

我不认为你可以在Excel中原生地使用正则表达式,我觉得这需要一些VBScript,我不知道。

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

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

我想在每个以逗号分隔的记录的开头提取数字,并在另一列中将它们相加

如果我们在逗号上拆分字符串并考虑子字符串,我认为这足以作为正则表达式

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

(只应考虑多个数字中的第一个,无数字符串应提取为空并被视为零。)

以下是某些样本数据的预期输出

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

如何让Excel执行此计算?

1 个答案:

答案 0 :(得分:0)

要在Excel / VBA中使用VBScript RegExps,请添加对" Microsoft VBScript正则表达式5.5" (版本可能会发生变化),正如the answer simoco指出的那样详细描述。

要对字符串中的数字序列求和,请使用简单模式,例如" \ 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

(存在正则表达式以使困难事情变得容易,反之亦然)