1

私は VBA に少し慣れていないので、このトピックについてフォーラムを検索してみましたが、検索に正しい単語を使用したかどうかわかりません。これが私の質問です:

VBA を使用して、不足している情報を正規表現で抽出しています。電話番号とファックス番号を含むテキストを含むテーブルがあるとします。数値を表にまとめたいと思います。これまでのところ、私が持っているコードは問題なく動作しますが、何らかの理由で複数の番号 (通常の番号と 800 # など) がある場合、1 つの番号のみが取得され、他の番号は取得されません。すべての結果をテーブルに追加するにはどうすればよいですか?

クエリ:

SELECT regxtr([Table1]![field1]) AS phone FROM Table1;

(regxtr)関数のVBAコード:

Option Compare Database

Function regxtr(ByVal Target As String) As String 'Target is the field we are 'extracting from

Dim re As New RegExp
Dim oMatches As Object
Dim oMatch As Object
Dim n As Long
n = 0

'Set re = CreateObject("vbscript.regexp")
With re
.Global = True
.IgnoreCase = True
.Multiline = True
.Pattern = "(\d\d\d.\d\d\d\.\d\d\d\d)" 'keeping the pattern simple for now just to test
End With

    'test before executing
If re.Test(Target) = True Then
Set oMatches = re.Execute(Target)

         'attempt to get all matches. THIS IS WHERE I AM FAILING
For n = 0 To oMatches.Count - 1
Set oMatch = oMatches(n)

   regxtr = oMatch.Value
    n = n + 1  ' does this even belong here?

    Next
End If


End Function

すべての一致がクエリのフィールド [電話] に入力されるようにするにはどうすればよいですか? どんな助けでも大歓迎です。

4

1 に答える 1

0

まず用語の訂正です。「サブマッチ」(他の正規表現の実装では「キャプチャ グループ」とも呼ばれます) を探しているわけではありません。正規表現の「一致」を探しているので、括弧を削除して使用\d{3}.\d{3}.\d{4}できます。

Function regxtr(ByVal Target As String) As String 'Target is the field we are 'extracting from
Dim re As New RegExp
Dim oMatches As Object
Dim oMatch As Object

With re
    .Global = True
    .IgnoreCase = True
    .Multiline = True
    .Pattern = "\d{3}.\d{3}.\d{4}" 'keeping the pattern simple for now just to test
End With

If re.Test(Target) = True Then
    Set oMatches = re.Execute(Target)
    For Each oMatch In oMatches  'Note: you may get multiple matches because you set re.Global = True above, otherwise you would only get the first match
        regxtr = regxtr & " " & oMatch 'Note: this is awkward and not advisable as a way to return the values. This is just an example.
    Next oMatch
End If
End Function

テストとして:

?regxtr("foo 993-242.1231bar994.425-1234hello987.234.2424 world 999.342-5252")
 993-242.1231 994.425-1234 987.234.2424 999.342-5252
于 2012-06-11T18:14:36.513 に答える