はじめに
改めて言うまでもないことですが、文字列処理で正規表現が使えると非常に便利です。VBAで正規表現を利用する方法を紹介したいと思います。
対象読者
- VBAで正規表現を使用したい方
- VBAで煩雑な文字列処理の行う必要のある方
なお、「正規表現についてよくわからない」という方は、以下のページの解説などを参考にしてください。
必要な環境
- Windows VistaまたはWindows XP
- VBA開発環境
正規表現を使う前に
VBAで文字列比較を行う場合、標準の機能としてStrComp関数やLike演算子があります。
特にLike演算子は、ワイルドカードなどによるパターンマッチングが行えます。正規表現よりも柔軟性は劣りますが、実現したい機能がLike演算子で済むのならば、無理に正規表現は使わずLike演算子を使った方がよいと思います。詳しくは、ヘルプにあるLike演算子の解説を見てください。
事前の準備
VBAで正規表現を使うには、RegExpオブジェクトというものを利用します。そのため、事前にVBE(Visual Basic Editor)で以下の設定をしてください。
- ツール(T)を選択
- 参照設定(R)を選択
- 「Microsoft VBScript Regular Expressions 5.5」にチェックを付ける(下図参照)
- OKボタンをクリック
これでRegExpオブジェクトが使えるようになります。
詳しくは、以下のページの解説を参考にしてください。
文字列の操作1
メタ文字
メタ文字の一覧です。正規表現でこれらの文字自身をマッチングしたい場合は、手前に「\」を付けてください。
^ $ ? * + . | { } \ [ ] ( )
\^ \$ \? \* \+ \. \| \{ \} \\ \[ \] \( \)
なお、スラッシュ「/」はメタ文字に含まれていません。
サポートする正規表現
以下の正規表現パターンをサポートします。
シンボル | 機能 |
^ | 文字列の先頭にマッチします。 |
$ | 文字列の末尾にマッチします。 |
\b | 単語の境界にマッチします。 |
\B | 単語の境界以外にマッチします。 |
\n | 改行にマッチします。 |
\f | フォームフィード(改ページ)にマッチします。 |
\r | キャリッジリターン(行頭復帰)にマッチします。 |
\t | 水平タブにマッチします。 |
\v | 垂直タブにマッチします。 |
\xxx | 8進数(シフトJIS) xxx によって表現される文字にマッチします。"\101" は "A" にマッチします。ただし、ASCII文字以外の文字(半角カタカナ、全角文字等)には使えません。 |
\xdd | 16進数(シフトJIS) dd によって表現される文字にマッチします。"\x41" は "A" にマッチします。ただし、ASCII文字以外の文字(半角カタカナ、全角文字等)には使えません。 |
\uxxxx | Unicode(UTF-16) xxxx によって表現される文字にマッチします。全角文字にも使えます。必ず xxxx の部分は4桁にしてください。"\u0041" は "A" にマッチします。"\u3042" は "あ" にマッチします。 |
[ ] | "[ ]" 内に含まれている文字にマッチします。"-"による範囲指定も使えます。全角文字にも対応しています。 |
[^ ] | "[^ ]" 内に含まれている文字以外にマッチします。"-"による範囲指定も使えます。全角文字にも対応しています。 |
\w | 単語に使用される文字にマッチします。[a-zA-Z_0-9]と同じ意味です。 |
\W | 単語に使用される文字以外の文字にマッチします。[^a-zA-Z_0-9]と同じ意味です。 |
. | \n 以外の文字にマッチします。全角文字にもマッチします。 |
\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回以下にマッチします。 |
? | 直前の文字の0または1回にマッチします。{0,1}と同じ意味です。 |
* | 直前の文字の0回以上にマッチします。{0,}と同じ意味です。 |
+ | 直前の文字の1回以上にマッチします。{1,}と同じ意味です。 |
( ) | 複数の文字をグループ化します。ネストすることができます。 |
| | 複数の文字列を1つの正規表現にまとめ、そのうちのいずれかにマッチします。 |