Pet*_*vic 1 excel vba excel-vba
我尝试在Excel中创建新函数,将计算给定的值(类似于SUM函数,但只有给定的前缀).
A
---------
1|AA30
2|AA10
3|BC446
4|AA10
// result will be 50 on SUM_PREFIX(A1:A4;"AA")
Run Code Online (Sandbox Code Playgroud)
问题是,当值为例如AA10,434或AA4.43时.我可以帮我解决问题吗?这是我在VB中的第一个stript.
Function SUM_PREFIX(Data As Range, prefix As String) As Double
Dim result As Double
Dim strVal As String
Dim i As Integer
Dim objRegExp As Object
Set objRegExp = CreateObject("vbscript.regexp")
With objRegExp
.IgnoreCase = True
.MultiLine = False
.Pattern = "^[" + prefix + "]+[0-9]+(\,|\.)?[0-9]?$"
.Global = True
End With
For i = 1 To Data.Rows.Count
Debug.Print Data.Cells(i, 1)
If objRegExp.Test(Data.Cells(i, 1)) = True Then
strVal = Replace(Data.Cells(i, 1), prefix, "")
Debug.Print strVal
strVal = Trim(Replace(strVal, ",", "."))
Debug.Print strVal
result = result + CDbl(strVal)
End If
Next i
SUM_PREFIX = result
End Function
Run Code Online (Sandbox Code Playgroud)
感谢帮助.
ssa*_*ndo 10
CDbl是区域设置感知的,所以检查你的Replace是否正确(例如,在我的语言环境中,我必须用","代替"."才能使它工作).如果您不想依赖于区域设置感知代码,请使用Val而不是CDbl因为Val只识别"." 无论区域设置如何,都是有效的小数分隔符.