私がJavaで持っていた方法をVBAに変換することは、予想以上に困難になっています。名前付きグループを持つVBAと正規表現
私はそれはいくつかの研究の後に、VBAでサポートされて表示されないというオブジェクトグループを使用していますhere
を見つけることができる正規表現を持っています。私は機能への入力に基づいて異なるフォーマットにIPアドレスをフォーマットするExcel用の関数を記述しようとしています。
さまざまなパターンをキャプチャするには、名前付きグループを使用して回避するにはどうすればよいですか?
Function formatIP(item As String, displayType As String) As String
'displayTypes CIDR,MASK,RANGE
'Set theRegEx = CreateObject("VBScript.RegExp")
Dim theRegEx As New RegExp
With theRegEx
.Global = True
.MultiLine = False
.IgnoreCase = False
.Pattern = "(?<address>\d{1,3}(?:\.\d{1,3}){2}\.(?<FromSeg>\d{1,3}))(?:(?:\/|\s+\/\s+)(?<CIDR>\d{1,2})|(?:-|\s+to\s+)(?<ToSeg>\d{1,3}(?![\d\.]))|(?:-|\s*to\s+)(?<ToIP>\d{1,3}(?:\.\d{1,3}){3})|\s+(?<Mask>25\d(?:\.\d{1,3}){3})|\s*)?"
.Execute (item)
End With
'Set MyMatches = theRegEx.Execute(item)
Debug.Print "SubMatches.Count: " & MyMatches.item(0).SubMatches.Count
If MyMatches.Count <> 0 Then
With MyMatches
For myMatchCt = 0 To .Count - 1
Debug.Print "myMatchCt: " & myMatchCt
For subMtCt = 0 To .item(subMtCt).SubMatches.Count - 1
Debug.Print "subMtCt: " & subMtCt
Debug.Print ("," & .item(myMatchCt).SubMatches.item(subMtCt))
Next
Next
End With
Else
Debug.Print "No Matches"
End If
formatIP = ""
End Function
これは、私がそれが起こっていると思っていたよりも簡単になりました。誰かが私にループを使って一致する結果を拾い読みすることができますか?私はさまざまな方法が使われているのを見ています。 –
@JamieSnipesおそらく 'For Each object in Collection'は' For I = 0 to .count-1'よりも少し効率的です。あなたのサブミットでは、とにかくカウンターを維持する必要があります。 –
For eachループはオブジェクトコレクションを反復するForループよりもはるかに高速です。 –