エクセルマニア

VBAで正規表現による文字列置換

TOP > VBA・マクロ >  正規表現による文字列置換
このエントリーをはてなブックマークに追加

文字列置換 CreateObject("VBScript.RegExp")

VBAで正規表現による文字列置換の手法を解説します。置換には RegExpオブジェクトのReplace関数を使用します。 細かいプロパティの詳細(MSDN)はこちらをご確認ください。

サンプルコード


Dim reg
Dim pat As String
Dim v1 As String
Dim v2 As String
Dim rep As String
  
v1 = Range("A2").Value     '検索対象
v2 = Range("A6").Value      '置換後の文字列

Set reg = CreateObject("VBScript.RegExp")   'オブジェクト作成
pat = Range("A4").Value     '検索パターン

'正規表現オブジェクトの設定

With reg
    .pattern = pat     'パターンを設定します
    .IgnoreCase = True '大文字と小文字を区別するFalseか、しないTrueか
    .Global = True       '文字列全体を検索するTrueか、しないFalseか
End With


'正規表現による置換の実行
rep = reg.Replace(v1, v2)

'結果ダイアログを出力
MsgBox rep


実行結果:http が hogehoge に置換されました。

正規表現による文字列置換

ダウンロード


RegExpオブジェクトのメソッド

Replaceメソッドobject.Replace(string1, string2)対象文字列から正規表現string1をstring2に置換します。
Executeメソッドobject.Execute(string)文字列を正規表現で検索し、Matchesコレクションを返します。
Testメソッドobject.Test(string)パターンにマッチする文字列が見つかったらTrue、見つからない場合はFalseを返します。

RegExpオブジェクトのプロパティ

Patternプロパティ正規表現パターンを設定します。
IgnoreCaseプロパティ大文字と小文字を区別する(False:規定値)、しない(True)を設定します。
Globalプロパティ文字列全体を検索する(True)か、1回目のマッチで終了する(False)を設定します。

正規表現文字列

RegExpオブジェクトのPatternプロパティに設定できる正規表現文字列です。
文字内容
\次に続く文字が特別な文字かリテラル文字であることを示す。つまり\nは改行文字になるが、nは文字nになる。
^文字列の先頭。
$文字列の末尾。
*直前の文字の0回以上の繰り返し。
+直前の文字の1回以上の繰り返し。
?直前の文字と0回または1回一致。
. (ドット)改行文字(n)以外の文字。
[ ][  ] 内に含まれるいずれかの文字に一致します。[a-z]のように「-」を使って範囲指定。
[^ ][^ ] 内に含まれている文字以外に一致します。[^a-z]のように「-」を使って範囲指定。
( )( )内に指定した文字と一致します。
|複数の文字列を1つのパターンとする。a|bとするとaまたはbと一致。
\b単語の区切り(スペースや末尾)。
\B単語の区切り以外。
\d数字。[0-9]と同義
\D数字以外。[^0-9]と同義
\n改行文字。
\f改ページ。
\rキャリッジリターン(行頭復帰)。
\tタブ。
\v垂直タブ。
\w単語に使用される文字。[A-Za-z0-9_]と同義
\W単語に使用される文字以外。[^A-Za-z0-9_]とと同義
\s空白文字、タブ文字。
\S空白以外の文字。
{x}直前の文字のx回の繰り返しに一致。
{x,}直前の文字のx回以上の繰り返し。
{x,y}直前の文字のx回以上、y回以下の繰り返し。


このエントリーをはてなブックマークに追加