问:我应该使用哪个 Excel VBA RegEx 表达式来计算小数位数?
所需输出
这是一个包含一些示例输入字符串和所需输出的表格。
输入所需的输出 字符串最大值单位小数位 -------------------------------------------------- 200A 200A 0 110kV 110kV 0 38,1兆瓦 38,1兆瓦 1 38,1 无功 38,1 无功 1 0-130℃ 130℃ 0 20-130℃ 130℃ 0 2000A 2000A 0 10 千伏 10 伏 0 34,6兆瓦 34,6兆瓦 1 34,6 无功 34,6 无功 1 600A 600A 0 114,3 兆瓦 114,3 兆瓦 1 114,3 无功 114,3 无功 1 2500A 2500A 0 300A 300A 0 500 A 500 A 0 100A 100A 0
到目前为止我所做
的 在这里您可以看到一个独立的 Excel VBA 代码。第一个子仅用于测试。
功能RegEx
是我的问题。
Sub TestRegEx()
strArray = Array("200 A", "200 A", "110 kV", "38,1MW", "38,1Mvar", _
"0-130°C", "2000 A", "10 kV", "34,6MW", "34,6Mvar", "600 A", _
"114,3 MW", "114,3 Mvar", "2500 A", "300 A", "500 A", "100 A")
For i = 0 To UBound(strArray)
Call RegEx(strArray(i))
Next
End Sub
Function RegEx(ByVal strInput As String)
Dim objRegEx As Object
Set objRegEx = CreateObject("VBScript.RegExp")
objRegEx.IgnoreCase = True
objRegEx.Global = True
'Show me the value
objRegEx.Pattern = "[^0-9_,]"
Debug.Print objRegEx.Replace(strInput, "")
'Show me the unit
objRegEx.Pattern = "[^A-Z_°]"
Debug.Print objRegEx.Replace(strInput, "")
'Show me the decimal places
objRegEx.Pattern = "?????"
Debug.Print objRegEx.Replace(strInput, "")
End Function
提示
- 我想避免像 InStr 这样的普通 VBA 方法或循环遍历每个字符。
- 也许VBA
Len
方法可以用来计算字符串的长度。但是如果小数点为零,它将失败,或者? - 对我来说,正则表达式很难阅读。我所有的知识都基于这篇 MSDN 文章。
感谢您对我最初关于如何计算小数位的问题的任何帮助。
PS:如果您对我的另外两个 RegEx 字符串unit和value有建议,请告诉我。例如,我的值正则表达式在“20-130°C”上失败。我不知道如何删除“-”中剩下的所有内容以仅提取值“130”。