Baccho Log

No Image

Sponsored Link

[Excel, VBA]正規表現を使う

  • 投稿日:
  • 更新日:
Tags:
Excel VBA 正規表現
Categories:
プログラミング

正規表現のオブジェクトを生成

CreateObject("VBScript.RegExp")
以下プロパティやメソッドを使用する。

プロパティ

  • Pattern
    検索する際の正規表現のパターンを設定する。
  • IgnoreCase
    検索する際の大文字と小文字を区別するかの真偽値。
    デフォルトはFalse(区別する)
  • Global
    検索文字列を全て検索する(True)か最初に一致したものだけを検索する(False)か。
    デフォルトはFalse

メソッド

  • Test(str)
    strの文字列にPatternが含まれているかを検索して、一致する文字列があるか真偽値を返す。
  • Replace(str1, str2)
    str1の文字列にPatternが含まれているかを検索して、
    一致するものがあれば、str2に置換をする。
  • Execute(str)
    strの文字列にPatternが含まれているかを検索して、
    一致した文字列ごとに、存在するMatchオブジェクトを含む、Matchesコレクションを返す。

Matches

RegExpオブジェクトのExcecuteメソッドによってのみ使用可能。
Matchesコレクションは、Matchオブジェクトの集合である。

  • Execute(str).Count
    Patternに一致する個数を返す。
  • Execute(str).Item
    Matchesから、Matchオブジェクトにアクセス出来る。
    ※Itemを使用しなくても、Matches(0)のようにしてもアクセス出来る。

Match

nはアクセスしたい数値を入れる。

  • Execute(str).Item(n).FirstIndex
    最初にマッチした位置を返します。(0始まり)
  • Execute(str).Item(n).Length
    マッチした文字列の長さを返します。
  • Execute(str).Item(n).Value
    マッチした文字列を返します。

Ex.1)正規表現の使用方法

Sub regExp_sample()
    Dim reg, match As Object
    Dim str As String
    str = "testをするからtestがちゃんとtestされているかTestしてね"

    ' RegExpオブジェクトの生成
    Set reg = CreateObject("VBScript.RegExp")

    ' 正規表現パターンを入力(この条件で検索される)
    reg.Pattern = "test"

    ' 検索条件に当てはまる文字列があれば、Trueを返す。
    ' 今回はTrueが返る。
    Debug.Print reg.Test(str)

'-----------------------------------------------
'ここから「Global」と「IgnoreCase」の挙動を確認
'-----------------------------------------------
    ' GlobalがFalseのため、1が返る。
    Debug.Print reg.Execute(str).Count
    reg.Global = True

    ' GlobalをTrueにしたため、3が返る。
    ' IgnoreCaseがFalseのため、「Test」はカウントされない
    Debug.Print reg.Execute(str).Count
    reg.IgnoreCase = True

    ' IgnoreCaseをTrueにしたため、4が返る。
    Debug.Print reg.Execute(str).Count

'-----------------------------------------------
'ここから「Execute」の挙動を確認
'-----------------------------------------------
    Set match = reg.Execute(str)

    ' 2回目に一致した文字列の長さを返す。今回は4が返る。
    ' reg.Execute(str).Item(1).Length これと同じ挙動
    Debug.Print match(1).Length

    ' 1回目に一致した文字列の位置を返す。今回は0が返る。
    Debug.Print match(0).FirstIndex

    ' 3回目に一致した文字列の位置を返す。今回は18が返る。
    Debug.Print match(2).FirstIndex

    ' 4回目に一致した文字列を返す。今回は「Test」が返る。
    Debug.Print match(3).Value


'-----------------------------------------------
'ここから「Replace」の挙動を確認
'-----------------------------------------------
    ' strの中から、Patternに一致するものを置換する。
    ' IgnoreCaseをTrueにしたため、大文字と小文字は区別しない。
    Debug.Print reg.Replace(str, "xxx")

    Set match = Nothing
    Set reg = Nothing
End Sub

▼参考
http://excel-ubara.com/excelvba4/EXCEL232.html

« 累乗の計算[WSH]Outlookの操作 »

Sponsored Link

コメントする

記事の感想や修正依頼等ありましたら、コメントをお願いいたします