在Excel /macros中将string转换为双精度

我尝试在Excel中创build新的函数,女巫将计数给定的值(像SUM函数,但只有给定的前缀)。

A --------- 1|AA30 2|AA10 3|BC446 4|AA10 // result will be 50 on SUM_PREFIX(A1:A4;"AA") 

问题是,当数值的forms如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 

感谢帮助。

CDbl是locale感知的,所以检查你的Replace是否正确(例如,在我的语言环境中,我必须用“,”replace“。”以使其工作)。 如果您不想依赖区域识别代码,请使用Val代替CDbl因为Val只能识别“。” 作为一个有效的小数点分隔符,不pipe语言环境

 Function SUM_PREFIXO(DADOS As Range, PREFIXO As String) As Double Dim result, NI 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 = "^[" + PREFIXO + "]+[0-9]+(\,|\.)?[0-9]?$" .Global = True End With NI = DADOS.Rows.Count For i = 1 To DADOS.Rows.Count Debug.Print (DADOS.Cells(i, 1)) If objRegExp.Test(RetiraEspaço(DADOS.Cells(i, 1))) = True Then strVal = Trim(Replace(DADOS.Cells(i, 1), PREFIXO, "")) Debug.Print strVal strVal = Trim(Replace(strVal, ".", ",")) Debug.Print strVal strVal = Trim(Replace(strVal, ",", ",")) Debug.Print strVal result = result + CDbl(strVal) End If Next i SUM_PREFIXO = result End Function 

'Com ocódigoabaixo pode-se'remover osespaçosextras entre as palavras de um texto:FunctionRetiraEspaço(Texto)

 Dim Vpalavra, inicio, termino, Wresultado inicio = 1 Texto = UCase(Texto) & " " Do Until InStr(inicio, Texto, " ") = 0 termino = InStr(inicio, Texto, " ") Vpalavra = Mid(Texto, inicio, termino - inicio) inicio = termino + 1 Wresultado = Wresultado & "" & Vpalavra Loop RetiraEspaço = Trim(Wresultado) 

结束function