Q:小数点以下の桁数を数えるには、どの Excel VBA RegEx 式を使用すればよいですか?
望ましい出力
これは、入力文字列の例と望ましい出力を示した表です。
入力 必要な出力 文字列 最大値 単位 小数点以下の桁数 -------------------------------------------------- 200A 200A 0 110kV 110kV 0 38,1MW 38,1MW 1 38,1Mvar 38,1Mvar 1 0~130℃ 130℃ 0 20~130℃ 130℃ 0 2000A 2000A 0 10kV 10V 0 34.6MW 34.6MW 1 34,6Mvar 34,6Mvar 1 600A 600A 0 114,3 MW 114,3 MW 1 114,3 Mvar 114,3 Mvar 1 2500A 2500A 0 300A 300A 0 500A 500A 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: unitとvalueの他の 2 つの RegEx 文字列について提案がある場合は、お知らせください。たとえば、私の値の正規表現は「20-130°C」で失敗します。「-」から残っているものをすべて削除して、値「130」のみを抽出する方法がわかりません。