ExcelマクロVBA技術解説 | VBAで正規表現を利用する(RegExp) | Excelマクロの問題点と解決策、エクセルVBAの技術的解説



最終更新日:2013-07-31

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番目の括弧で囲まれた句にマッチします。


使い方

事前バインディング
Microsoft VBScript Regular Expressions 1.0
(バージョンは環境によります、1.0以上なら良く5.5もあります。)
これを参照設定し、
Dim 変数 As New RegExp
遅延バインディング
Dim 変数 As Object
変数 = 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コレクションを返します。

使用例

  A       B               C      D
意味 検索パターン 対象文字 結果
郵便番号 \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コレクション

Matchesコレクションには、個別の Match オブジェクトが格納されます。
このコレクションは、RegExp オブジェクトの Execute メソッドによってのみ作成可能です。
個別の Match オブジェクトのプロパティと同様、Matches コレクションのプロパティは読み取り専用です。

プロパティ 説明
Count Count - コレクション内の Match オブジェクトの数を含んでいる読み取り専用の値。
Item Item - Matches コレクション オブジェクトから Match オブジェクトにランダムにアクセスできるようにする読み取り専用の値。

Matchオブジェクト

Matchオブジェクトは、RegExp オブジェクトの Execute メソッドによってのみ作成が可能です。
このメソッドが実際に返すのは、Match オブジェクトのコレクションです。
Match オブジェクトのプロパティは、すべて読み取り専用です。

プロパティ 説明
FirstIndex FirstIndex - 元の文字列内のマッチが起こった位置を含んでいる読み取り専用の値。
このインデックスは位置の記録に 基点を 0 とするオフセットを使用しており、文字列の最初の位置は 0 から始まります。
Length Length - マッチした文字列の合計の長さを含んでいる読み取り専用の値。
Value Value - マッチした値またはテキストを含んでいる読み取り専用の値。
これはまた、Match オブジェクトにアクセスするときの既定値でもあります。

SubMatchesコレクション

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
上記では、文字列をアルファベットと数値に分割して、順次メッセージボックスに表示しています。





同じテーマ「ExcelマクロVBA技術解説」の記事

Dictionary(ディクショナリー)連想配列の使い方について
Dictionary(ディクショナリー)のパフォーマンスについて
VBAでのInternetExplorer自動操作
VBAでのSQLの基礎(SQL:Structured Query Language)
VBAでメール送信する(CDO:Microsoft Collaboration Data Objects)
VBAでのOutlook自動操作
ADO(ActiveX Data Objects)の使い方の要点

新着記事 ・・・新着記事一覧を見る

空白セルを正しく判定する方法2|ExcelマクロVBA技術解説(5月6日)
フルパスをディレクトリ、ファイル名、拡張子に分ける|ExcelマクロVBA技術解説(4月15日)
テキストボックスの各種イベント|Excelユーザーフォーム入門(4月9日)
フォルダ(サブフォルダも全て)削除する、Optionでファイルのみ削除|ExcelマクロVBAサンプル集(4月4日)
最後の空白(や指定文字)以降の文字を取り出す|エクセル関数超技(3月26日)
先頭の数値、最後の数値を取り出す|エクセル関数超技(3月26日)
Excelファイルを開かずにシート名をチェック|ExcelマクロVBAサンプル集(3月23日)
数式の参照しているセルを取得する|ExcelマクロVBAサンプル集(3月18日)
CSVの読み込み方法(改の改)|ExcelマクロVBAサンプル集(3月17日)
変数とプロシージャーの命名について|ExcelマクロVBA技術解説(2月12日)

アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|ExcelマクロVBA入門
2.ひらがな⇔カタカナの変換|エクセル基本操作
3.RangeとCellsの使い方|ExcelマクロVBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|ExcelマクロVBA入門
5.徹底解説(VLOOKUP,MATCH,INDEX,OFFSET)|エクセル関数超技
6.変数とデータ型(Dim)|ExcelマクロVBA入門
7.セルの参照範囲を可変にする(OFFSET,COUNTA,MATCH)|エクセル関数超技
8.セルのコピー&値の貼り付け(PasteSpecial)|ExcelマクロVBA入門
9.CSVの読み込み方法|ExcelマクロVBAサンプル集
10.定数と型宣言文字(Const)|ExcelマクロVBA入門



  • >
  • >
  • >
  • VBAで正規表現を利用する(RegExp)

  • このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。




    ↑ PAGE TOP