文字列置換 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回以下の繰り返し。 |