Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

VBAで正規表現を使う

RegExpオブジェクトの利用

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2007/10/22 14:00

多くの文字列を処理するプログラムの場合、正規表現を使用できると便利です。本稿ではVBAでRegExpオブジェクトを利用し、正規表現を行う方法を紹介します。

目次

はじめに

 改めて言うまでもないことですが、文字列処理で正規表現が使えると非常に便利です。VBAで正規表現を利用する方法を紹介したいと思います。

対象読者

  • VBAで正規表現を使用したい方
  • VBAで煩雑な文字列処理の行う必要のある方

 なお、「正規表現についてよくわからない」という方は、以下のページの解説などを参考にしてください。

必要な環境

  • Windows VistaまたはWindows XP
  • VBA開発環境

正規表現を使う前に

 VBAで文字列比較を行う場合、標準の機能としてStrComp関数やLike演算子があります。

 特にLike演算子は、ワイルドカードなどによるパターンマッチングが行えます。正規表現よりも柔軟性は劣りますが、実現したい機能がLike演算子で済むのならば、無理に正規表現は使わずLike演算子を使った方がよいと思います。詳しくは、ヘルプにあるLike演算子の解説を見てください。

事前の準備

 VBAで正規表現を使うには、RegExpオブジェクトというものを利用します。そのため、事前にVBE(Visual Basic Editor)で以下の設定をしてください。

  1. ツール(T)を選択
  2. 参照設定(R)を選択
  3. 「Microsoft VBScript Regular Expressions 5.5」にチェックを付ける(下図参照)
  4. OKボタンをクリック

 これでRegExpオブジェクトが使えるようになります。

※「参照設定」を変更したくない場合
 何らかの理由で「参照設定」を変更したくない場合は、CreateObject関数を使って直接RegExpオブジェクトを取得する方法もあります。また、RegExpオブジェクトを使わずに、直接DLLから正規表現用の関数を呼び出す方法もあります。
 詳しくは、以下のページの解説を参考にしてください。
 文字列の操作1

メタ文字

 メタ文字の一覧です。正規表現でこれらの文字自身をマッチングしたい場合は、手前に「\」を付けてください。

^  $  ?  *  +  .  |  {  }  \  [  ]  (  )
「\」を付けた状態
\^  \$  \?  \*  \+  \.  \|
\{  \}  \\  \[  \]  \(  \)

 なお、スラッシュ「/」はメタ文字に含まれていません。

サポートする正規表現

 以下の正規表現パターンをサポートします。

シンボル機能
^文字列の先頭にマッチします。
$文字列の末尾にマッチします。
\b単語の境界にマッチします。
\B単語の境界以外にマッチします。
\n改行にマッチします。
\fフォームフィード(改ページ)にマッチします。
\rキャリッジリターン(行頭復帰)にマッチします。
\t水平タブにマッチします。
\v垂直タブにマッチします。
\xxx8進数(シフトJIS) xxx によって表現される文字にマッチします。"\101" は "A" にマッチします。ただし、ASCII文字以外の文字(半角カタカナ、全角文字等)には使えません。
\xdd16進数(シフトJIS) dd によって表現される文字にマッチします。"\x41" は "A" にマッチします。ただし、ASCII文字以外の文字(半角カタカナ、全角文字等)には使えません。
\uxxxxUnicode(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つの正規表現にまとめ、そのうちのいずれかにマッチします。
※"-"による範囲指定を行う場合の注意点
 "[ ]"内で"-"による範囲指定を使う場合は、文字の並びがシフトJISではなくUnicode(UTF-16)として解釈されます。特に、全角文字を使う場合は、シフトJISとUnicode(UTF-16)では並び方がまったく違うので注意してください。また、矛盾した範囲指定を行った場合は、実行時にエラーになります。例:"[Z-A]"

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

修正履歴

  • 2007/10/27 17:16 2007/10/27 "[ ]"の説明を訂正

著者プロフィール

All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5