VBAで正規表現を利用する(RegExp)
正規表現は複雑なパターンマッチングとテキストの検索置換するためのツールです、
VBAで正規表現を使う場合はRegExpオブジェクトを使用します、
RegExpは、VBScriptに正規表現が用意されているオブジェクトです。
メタ文字
^ $ ? * + . | { } \ [ ] ( )
正規表現
シンボル | 機能 |
位置マッチング | |
^ | 文字列の先頭にのみマッチします。 |
$ | 文字列の末尾にのみマッチします。 |
\b | 任意の単語境界にマッチします。 |
\B | 任意の単語境界以外の位置にマッチします。 |
リテラル | |
英数字 | 英字と数字に文字どおりにマッチします。 |
\n | 改行にマッチします。 |
\f | フォーム フィードにマッチします。 |
\r | キャリッジ リターンにマッチします。 |
\t | 水平タブにマッチします。 |
\v | 垂直タブにマッチします。 |
\? | ? にマッチします。 |
\* | * にマッチします。 |
\+ | + にマッチします。 |
\. | . にマッチします。 |
\| | | にマッチします。 |
\{ | { にマッチします。 |
\} | } にマッチします。 |
\\ | \ にマッチします。 |
\[ | [ にマッチします。 |
\] | ] にマッチします。 |
\( | ( にマッチします。 |
\) | ) にマッチします。 |
\xxx | 8進数 xxx によって表現されるASCII文字にマッチします。 |
\xdd | 16進数 dd によって表現されるASCII文字にマッチします。 |
\uxxxx | UNICODE xxxx によって表現されるASCII文字にマッチします。 |
文字クラス | |
[xyz] | 文字セットに含まれている任意の1文字にマッチします。 |
[^xyz] | [^xyz] 文字セットに含まれていない任意の1文字にマッチします。 |
. | \n 以外の任意の文字にマッチします。 |
\w | 単語に使用される任意の文字にマッチします。[a-zA-Z_0-9]と等価。 |
\W | 単語に使用される文字以外の任意の文字にマッチします。[^a-zA-Z_0-9]と等価。 |
\d | 任意の数字にマッチします。[0-9]と等価。 |
\D | 任意の数字以外の文字にマッチします。[^0-9]と等価。 |
\s | 任意のスペース文字にマッチします。[ \t\r\n\v\f]と等価。 |
\S | 任意の非スペース文字にマッチします。[^ \t\r\n\v\f]と等価。 |
繰り返し | |
{x} | 正規表現のちょうど x個の直前の文字にマッチします。 |
{x,} | 正規表現のx個以上の直前の文字にマッチします。 |
{x,y} | 正規表現のx個以上、y個以下の直前の文字にマッチします。 |
? | ゼロ個または1個の直前の文字にマッチします。{0,1}と等価。 |
* | ゼロ個以上の直前の文字にマッチします。{0,}と等価。 |
+ | 1個以上の直前の文字にマッチします。{1,}と等価。 |
選択とグループ化 | |
() | 複数の句をグループ化して、1つの句を作成します。ネストすることができます。 "(ab)?(c)" は "abc" または "c" にマッチします。 |
| | 選択は、複数の句を1つの正規表現にまとめ、これらのうちの任意の句にマッチします。 |
後方参照 | |
()\n | n番目の括弧で囲まれた句にマッチします。 |
使い方
(バージョンは環境によります、1.0以上なら良く5.5もあります。)
これを参照設定し、
Dim 変数 As New RegExp
変数 = CreateObject("VBScript.RegExp")
RegExpオブジェクト
プロパティ | 説明 |
Pattern | 検索するパターンを設定する |
IgnoreCase | 検索するときに大文字と小文字を区別する(既定値:False)か、区別しない(True)かを設定する |
Global | 検索文字列全体について検索する(True)か、最初の一致を検索する(既定値:False)のかを設定する |
メソッド | 説明 |
Test | object.Test(string) パターンに一致する文字列が検索されたらTrueを返します。 見つからないとFalseを返します。 |
Replace | object.Replace(string1, string2) 検索されたら置換文字列(string2)と置き換えます |
Execute | object.Execute(string) 指定された文字列を正規表現で検索します 文字列内で見つかった文字列ごとに存在するMatchオブジェクトを含む、Matchesコレクションを返します。 |
使用例
意味 | 検索パターン | 対象文字 | 結果 |
郵便番号 | \d{3}-\d{4} | 101 | |
\d{3}-\d{4} | 101-101 | ||
\d{3}-\d{4} | 101-0011 | ||
メール | [\w.\-]+@[\w\-]+\.[\w.\-]+ | abc.def | |
[\w.\-]+@[\w\-]+\.[\w.\-]+ | abc@def | ||
[\w.\-]+@[\w\-]+\.[\w.\-]+ | abc@def.com |
上記表の対象文字の妥当性を判定し、結果に"OK"、"NG"を表示します。
Dim i As Long Dim re As New RegExp Dim strIn As String For i = 2 To 7 With re .Global = True '文字列全体を検索 .IgnoreCase = True '大文字小文字を区別しない .Pattern = Cells(i, 2) If .test(Cells(i, 3)) Then Cells(i, 4) = "OK" Else Cells(i, 4) = "NG" End If End With Next |
Matchesコレクション
このコレクションは、RegExp オブジェクトの Execute メソッドによってのみ作成可能です。
個別の Match オブジェクトのプロパティと同様、Matches コレクションのプロパティは読み取り専用です。
プロパティ | 説明 |
Count | Count - コレクション内の Match オブジェクトの数を含んでいる読み取り専用の値。 |
Item | Item - Matches コレクション オブジェクトから Match オブジェクトにランダムにアクセスできるようにする読み取り専用の値。 |
Matchオブジェクト
このメソッドが実際に返すのは、Match オブジェクトのコレクションです。
Match オブジェクトのプロパティは、すべて読み取り専用です。
プロパティ | 説明 |
FirstIndex | FirstIndex - 元の文字列内のマッチが起こった位置を含んでいる読み取り専用の値。 このインデックスは位置の記録に 基点を 0 とするオフセットを使用しており、文字列の最初の位置は 0 から始まります。 |
Length | Length - マッチした文字列の合計の長さを含んでいる読み取り専用の値。 |
Value | Value - マッチした値またはテキストを含んでいる読み取り専用の値。 これはまた、Match オブジェクトにアクセスするときの既定値でもあります。 |
SubMatchesコレクション
このコレクションは、RegExp オブジェクトの Execute メソッドによってのみ作成可能です。
SubMatches コレクションのプロパティ(Count,Item)は、すべて読み取り専用です。
使用例
Dim re As New RegExp Dim mc As MatchCollection Dim m As Match Dim i As Long re.Pattern = "([A-Z,a-z]+)([0-9]+)" re.Global = True Set mc = re.Execute("Abc123DEFGH4567ijkl890") For Each m In mc For i = 0 To m.SubMatches.Count - 1 MsgBox m.SubMatches(i) Next Next |
同じテーマ「マクロVBA技術解説」の記事
事前バインディングと遅延バインディング(実行時バインディング)
Dictionary(ディクショナリー)連想配列の使い方について
Dictionary(ディクショナリー)のパフォーマンスについて
VBAでのInternetExplorer自動操作
VBAでのSQLの基礎(SQL:Structured Query Language)
VBAでメール送信する(CDO:Microsoft Collaboration Data Objects)
VBAでのOutlook自動操作
ADO(ActiveX Data Objects)の使い方の要点
新着記事 ・・・新着記事一覧を見る
VBAを定型文で覚えよう|ExcelマクロVBA技術解説(3月26日)
VBAスタンダード試験対策まとめ|MOS VBAエキスパート対策(3月16日)
ユーザーフォームとメニューの操作|MOS VBAエキスパート対策(3月14日)
ファイルの操作|MOS VBAエキスパート対策(3月14日)
ユーザーフォームの各種イベント|Excelユーザーフォーム(3月13日)
レジストリの操作|MOS VBAエキスパート対策(3月12日)
変数と配列|MOS VBAエキスパート対策(3月12日)
Colorプロパティの設定値一覧|VBA技術解説(3月12日)
APIとOLEオートメーション|MOS VBAエキスパート対策(3月11日)
エラーへの対処|MOS VBAエキスパート対策(3月10日)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|ExcelマクロVBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.変数とデータ型(Dim)|ExcelマクロVBA入門
6.ひらがな⇔カタカナの変換|エクセル基本操作
7.マクロって何?VBAって何?|ExcelマクロVBA入門
8.定数と型宣言文字(Const)|ExcelマクロVBA入門
9.とにかく書いて見よう(Sub,End Sub)|VBA入門
10.繰り返し処理(For Next)|ExcelマクロVBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。