<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>文字列処理 &#8211; biz-tactics</title>
	<atom:link href="https://mashukabu.com/tag/%E6%96%87%E5%AD%97%E5%88%97%E5%87%A6%E7%90%86/feed/" rel="self" type="application/rss+xml" />
	<link>https://mashukabu.com</link>
	<description></description>
	<lastBuildDate>Mon, 08 Jun 2026 15:50:54 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.1</generator>

<image>
	<url>https://mashukabu.com/wp-content/uploads/2022/04/cropped-site-icon-32x32.png</url>
	<title>文字列処理 &#8211; biz-tactics</title>
	<link>https://mashukabu.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>VBA正規表現（RegExp）の使い方｜実務パターン5選コード付き</title>
		<link>https://mashukabu.com/excel-vba-regexp-howto/</link>
					<comments>https://mashukabu.com/excel-vba-regexp-howto/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Mon, 08 Jun 2026 15:50:54 +0000</pubDate>
				<category><![CDATA[VBA・マクロ]]></category>
		<category><![CDATA[RegExp]]></category>
		<category><![CDATA[VBA]]></category>
		<category><![CDATA[データクレンジング]]></category>
		<category><![CDATA[中級VBA]]></category>
		<category><![CDATA[文字列処理]]></category>
		<category><![CDATA[正規表現]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=7851</guid>

					<description><![CDATA[VBAで正規表現（RegExp）を使う方法を基本から実務パターンまで解説。参照設定の手順、Test/Replace/Executeの使い方、メールアドレス検証・電話番号統一など実務5パターンのコードを掲載。早見表付きでそのままコピペ可能。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">「半角・全角が混ざった文字列を整えたい」「メールアドレスが正しい形式か一発でチェックしたい」。VBAでデータ処理をしていると、こんな場面によく出くわしますよね。</p>



<p class="wp-block-paragraph">TRIMやSUBSTITUTE、LEFTやMIDなどの文字列関数を組み合わせれば、簡単な処理ならなんとかなります。でも「数字3桁＋ハイフン＋数字4桁」のような「形のパターン」を扱おうとすると、とたんに数式が長く複雑になります。書いた本人すら後で読めなくなる、なんてこともありますよね。</p>



<p class="wp-block-paragraph">そんな複雑な文字列処理を一気にシンプルにしてくれるのが、VBAの正規表現（RegExp）です。「特定の形に一致するか」「一致した部分だけ取り出す」「一致した部分だけ置き換える」といった処理を、短いパターン文字列で表現できます。</p>



<p class="wp-block-paragraph">この記事では、VBAで正規表現を使う方法を、準備から実務パターンまで丁寧に解説します。コピペで使えるサンプルコード5本と、ブックマークしておくと便利なメタ文字の早見表も用意しました。正規表現に触れたことがない方でも、読み終わるころには自分のマクロに組み込めるようになりますよ。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-1" checked><label class="toc-title" for="toc-checkbox-1">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">VBAで正規表現が必要になる場面</a><ol><li><a href="#toc2" tabindex="0">TRIM・SUBSTITUTEでは対処できないケースとは</a></li><li><a href="#toc3" tabindex="0">Like演算子との使い分け基準</a></li></ol></li><li><a href="#toc4" tabindex="0">RegExpオブジェクトの準備</a><ol><li><a href="#toc5" tabindex="0">参照設定あり（早期バインディング）の手順</a></li><li><a href="#toc6" tabindex="0">CreateObjectあり（遅延バインディング）の手順</a></li><li><a href="#toc7" tabindex="0">早期 vs 遅延 どちらを選ぶか比較表</a></li></ol></li><li><a href="#toc8" tabindex="0">RegExpの3つのプロパティと3つのメソッド</a><ol><li><a href="#toc9" tabindex="0">Pattern・IgnoreCase・Globalの設定方法</a></li><li><a href="#toc10" tabindex="0">Test：パターン一致チェック</a></li><li><a href="#toc11" tabindex="0">Replace：パターン一致部分の置換</a></li><li><a href="#toc12" tabindex="0">Execute：マッチ結果のコレクション取得</a></li></ol></li><li><a href="#toc13" tabindex="0">よく使うメタ文字と正規表現パターン早見表</a><ol><li><a href="#toc14" tabindex="0">メタ文字一覧（記号・意味・使用例）</a></li><li><a href="#toc15" tabindex="0">実務でよく使うパターン集8選</a></li></ol></li><li><a href="#toc16" tabindex="0">実務パターン5選：コピペで使えるサンプルコード</a><ol><li><a href="#toc17" tabindex="0">①メールアドレス形式チェック</a></li><li><a href="#toc18" tabindex="0">②電話番号ハイフン統一</a></li><li><a href="#toc19" tabindex="0">③郵便番号抽出</a></li><li><a href="#toc20" tabindex="0">④全角英数字→半角変換</a></li><li><a href="#toc21" tabindex="0">⑤不要な記号一括削除</a></li></ol></li><li><a href="#toc22" tabindex="0">エラー処理：不正パターン入力時の対策</a><ol><li><a href="#toc23" tabindex="0">On Error GoToでRegExpエラーを捕捉する</a></li><li><a href="#toc24" tabindex="0">パターン検証関数を作っておくと安全</a></li></ol></li><li><a href="#toc25" tabindex="0">ワークシート関数との使い分け</a><ol><li><a href="#toc26" tabindex="0">REGEXTEST・REGEXREPLACE・REGEXEXTRACTとの違い</a></li><li><a href="#toc27" tabindex="0">VBA RegExpを選ぶべきシーン</a></li></ol></li><li><a href="#toc28" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">VBAで正規表現が必要になる場面</span></h2>



<p class="wp-block-paragraph">正規表現は「文字列の形（パターン）」を表現するための記法です。たとえば「数字が3桁続く」「先頭が0で始まる電話番号」といったルールを、短い記号の並びで書き表せます。</p>



<p class="wp-block-paragraph">VBAでは標準の文字列関数も豊富に用意されています。ではなぜ、わざわざ正規表現を使うのでしょうか。それは、文字列関数だけでは「形のパターン」を扱うのが苦手だからです。</p>



<p class="wp-block-paragraph">ここでは、正規表現が本当に役立つ場面を整理します。逆に言えば、ここで挙げる悩みがなければ無理に使う必要はありません。適材適所で使い分けるのがコツですよ。</p>



<h3 class="wp-block-heading"><span id="toc2">TRIM・SUBSTITUTEでは対処できないケースとは</span></h3>



<p class="wp-block-paragraph">VBAの文字列関数は「決まった位置」や「決まった文字」を扱うのは得意です。たとえば前後の空白を消すならTRIM、特定の文字を別の文字に置き換えるならSUBSTITUTE（Replace関数）で十分です。</p>



<p class="wp-block-paragraph">ところが、次のようなケースになると一気に難しくなります。</p>



<ul class="wp-block-list"><li>「数字が3桁、ハイフン、数字が4桁」のように、文字の「並び方のルール」で判定したい</li><li>セルの中に紛れ込んだ郵便番号や電話番号だけを取り出したい</li><li>全角の英数字が混ざっているかどうかを検出したい</li><li>複数種類の記号をまとめて一括削除したい</li></ul>



<p class="wp-block-paragraph">たとえば「文字列がメールアドレスの形式か」を文字列関数だけで判定するとします。アットマークの有無、ドットの位置、前後の文字種など、無数のIf文が必要になります。考えただけで気が遠くなりますよね。</p>



<p class="wp-block-paragraph">これを正規表現なら、たった1行のパターンで表現できます。「形のルールで判定・抽出・置換したい」という場面こそ、正規表現の出番なのです。</p>



<h3 class="wp-block-heading"><span id="toc3">Like演算子との使い分け基準</span></h3>



<p class="wp-block-paragraph">VBAには正規表現に似た機能として、Like演算子があります。<code>If 文字列 Like "A*"</code> のように、ワイルドカードを使った曖昧な比較ができる演算子です。</p>



<p class="wp-block-paragraph">Like演算子は手軽で、参照設定も不要です。「Aで始まる」「数字を1文字含む」程度の単純な判定なら、Like演算子のほうが速く書けます。</p>



<p class="wp-block-paragraph">ただしLike演算子には限界があります。「数字が3桁以上連続する」のような繰り返し回数の指定や、一致した部分の抽出はできません。複雑なパターンになるほど、正規表現に軍配が上がります。</p>



<p class="wp-block-paragraph">ざっくりした使い分けの目安は次のとおりです。</p>



<figure class="wp-block-table"><table><thead><tr><th>用途</th><th>おすすめ</th></tr></thead><tbody><tr><td>「〜で始まる」「〜を含む」程度の単純判定</td><td>Like演算子</td></tr><tr><td>繰り返し回数や文字種の細かい指定</td><td>正規表現（RegExp）</td></tr><tr><td>一致した部分を取り出したい（抽出）</td><td>正規表現（RegExp）</td></tr><tr><td>パターンに一致する全箇所を置換したい</td><td>正規表現（RegExp）</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Like演算子の詳しい使い方は、<a href="https://mashukabu.com/excel-vba-like-wildcard/">VBA Like演算子の使い方｜ワイルドカード5種で文字列を曖昧比較する方法</a>で解説しています。「Likeでは難しいな」と感じたら正規表現へ、と覚えておくとスムーズですよ。</p>



<h2 class="wp-block-heading"><span id="toc4">RegExpオブジェクトの準備</span></h2>



<p class="wp-block-paragraph">VBAの正規表現は、RegExpという専用のオブジェクトを使って動かします。このRegExpは、もともとVBScript用に作られた正規表現エンジンです。Windowsに標準で組み込まれているCOMコンポーネントなので、Excel VBAから呼び出して使えます。</p>



<p class="wp-block-paragraph">RegExpオブジェクトを用意する方法は2つあります。1つは「参照設定」をする方法（早期バインディング）、もう1つはCreateObject関数で呼び出す方法（遅延バインディング）です。</p>



<p class="wp-block-paragraph">どちらでも同じことができますが、メリットが異なります。まずは両方の手順を見て、最後に使い分けの基準を整理しますね。なお、この記事のコードはExcel 2019・2021・Microsoft 365のいずれでも動作します。</p>



<h3 class="wp-block-heading"><span id="toc5">参照設定あり（早期バインディング）の手順</span></h3>



<p class="wp-block-paragraph">参照設定をしておくと、コードの記述が少しスッキリし、入力補助（IntelliSense）も効くようになります。手順は次のとおりです。</p>



<p class="wp-block-paragraph">まずVBE（Visual Basic Editor）を開きます。ExcelでAlt + F11キーを押すか、開発タブの「Visual Basic」ボタンから開けます。開発タブが表示されていない場合は、ファイル → オプション → リボンのユーザー設定で「開発」にチェックを入れてください。</p>



<p class="wp-block-paragraph">VBEが開いたら、メニューの「ツール」→「参照設定」を選びます。一覧から「Microsoft VBScript Regular Expressions 5.5」を探してチェックを入れ、OKを押します。これで準備完了です。</p>



<p class="wp-block-paragraph">!<a href="https://mashukabu.com/_images/excel-vba-regexp-howto/01_screenshot_vbe-reference-setting.png/">_images/excel-vba-regexp-howto/01_screenshot_vbe-reference-setting.png</a></p>



<p class="wp-block-paragraph">参照設定をした場合、RegExpオブジェクトは次のように宣言します。</p>



<pre class="wp-block-code"><code>Sub RegExp早期バインディング例()
    Dim re As New RegExp '参照設定でRegExp型が使えるようになる
    re.Pattern = &quot;d{3}&quot;  'パターン: 数字が3桁連続
    re.Global = True       '一致する全箇所を対象にする

    MsgBox re.Test(&quot;商品コード123&quot;)  '「123」を含むのでTrueが返る
End Sub</code></pre>



<p class="wp-block-paragraph"><code>Dim re As New RegExp</code> のように型名を直接書ける点が、参照設定のメリットです。入力中に候補が出るので、プロパティ名のタイプミスも防げますよ。</p>



<h3 class="wp-block-heading"><span id="toc6">CreateObjectあり（遅延バインディング）の手順</span></h3>



<p class="wp-block-paragraph">もう1つの方法が、CreateObject関数を使う遅延バインディングです。参照設定が不要なので、マクロを他の人に配布するときに便利です。</p>



<p class="wp-block-paragraph">宣言と作成は次のように書きます。</p>



<pre class="wp-block-code"><code>Sub RegExp遅延バインディング例()
    Dim re As Object '型は汎用のObjectで宣言する
    Set re = CreateObject(&quot;VBScript.RegExp&quot;) 'RegExpを実行時に生成

    re.Pattern = &quot;d{3}&quot; 'パターン: 数字が3桁連続
    re.Global = True      '一致する全箇所を対象にする

    MsgBox re.Test(&quot;商品コード123&quot;)  '「123」を含むのでTrueが返る
End Sub</code></pre>



<p class="wp-block-paragraph">ポイントは2つです。1つ目は、変数を <code>As Object</code> で宣言すること。2つ目は、<code>Set re = CreateObject("VBScript.RegExp")</code> でオブジェクトを生成することです。</p>



<p class="wp-block-paragraph">参照設定をしていない環境でもそのまま動くので、社内の複数のパソコンでマクロを共有する場合はこちらが安心です。「あれ、参照設定し忘れた」というトラブルが起きませんよ。</p>



<h3 class="wp-block-heading"><span id="toc7">早期 vs 遅延 どちらを選ぶか比較表</span></h3>



<p class="wp-block-paragraph">早期バインディングと遅延バインディングは、それぞれ得意な場面が違います。次の比較表で整理しました。</p>



<figure class="wp-block-table"><table><thead><tr><th>比較項目</th><th>早期バインディング（参照設定）</th><th>遅延バインディング（CreateObject）</th></tr></thead><tbody><tr><td>参照設定</td><td>必要</td><td>不要</td></tr><tr><td>宣言の書き方</td><td><code>Dim re As New RegExp</code></td><td><code>Dim re As Object</code> ＋ CreateObject</td></tr><tr><td>入力補助（IntelliSense）</td><td>効く</td><td>効かない</td></tr><tr><td>実行速度</td><td>速い</td><td>やや遅い</td></tr><tr><td>配布マクロへの向き</td><td>配布先でも参照設定が必要</td><td>環境を選ばず動く</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Microsoftは、可能な限り早期バインディングを使うことを公式に推奨しています。自分専用のマクロや、速度を重視したい処理では早期バインディングが向いています。</p>



<p class="wp-block-paragraph">一方で、配布先の環境がわからない場合や、複数バージョンのExcel間で使い回したい場合は、遅延バインディングが安全です。「自分用は早期、配布用は遅延」と覚えておくと迷いませんよ。</p>



<p class="wp-block-paragraph">なお、この記事のサンプルコードは、どちらの方式でもそのまま動くように書いていきます。</p>



<h2 class="wp-block-heading"><span id="toc8">RegExpの3つのプロパティと3つのメソッド</span></h2>



<p class="wp-block-paragraph">RegExpオブジェクトは、3つのプロパティと3つのメソッドさえ押さえれば使いこなせます。覚えることが少ないのは、うれしいポイントですよね。</p>



<p class="wp-block-paragraph">プロパティは「どう探すか」の設定で、Pattern・Global・IgnoreCaseの3つです。メソッドは「何をするか」の動作で、Test・Replace・Executeの3つです。</p>



<p class="wp-block-paragraph">ここからは、それぞれを順番に見ていきます。この6つを理解すれば、後半の実務パターンもすんなり読めるようになりますよ。</p>



<h3 class="wp-block-heading"><span id="toc9">Pattern・IgnoreCase・Globalの設定方法</span></h3>



<p class="wp-block-paragraph">まずは3つのプロパティです。RegExpオブジェクトを作ったあと、探す前に設定しておきます。</p>



<pre class="wp-block-code"><code>Sub プロパティの設定例()
    Dim re As Object
    Set re = CreateObject(&quot;VBScript.RegExp&quot;)

    re.Pattern = &quot;[a-z]+&quot;  '探したいパターンを指定する（必須）
    re.IgnoreCase = True    '大文字小文字を区別しない（既定はFalse）
    re.Global = True        '一致する全箇所を対象にする（既定はFalse）

    MsgBox re.Test(&quot;Hello&quot;) 'IgnoreCase=TrueなのでTrueが返る
End Sub</code></pre>



<p class="wp-block-paragraph">3つのプロパティの役割をまとめます。</p>



<ul class="wp-block-list"><li><strong>Pattern</strong>：探す正規表現のパターンを文字列で指定します。これがないと始まりません。</li><li><strong>IgnoreCase</strong>：Trueにすると、大文字と小文字を区別せず一致を判定します。既定値はFalseです。</li><li><strong>Global</strong>：Trueにすると、一致する箇所をすべて対象にします。既定値のFalseだと、最初の1件だけが対象です。</li></ul>



<p class="wp-block-paragraph">特に注意したいのがGlobalです。既定はFalseなので、置換や抽出で「全部のはずなのに1件しか処理されない」というときは、たいていGlobalの設定漏れですよ。</p>



<h3 class="wp-block-heading"><span id="toc10">Test：パターン一致チェック</span></h3>



<p class="wp-block-paragraph">Testメソッドは、文字列がパターンに一致する箇所を含むかどうかを判定します。戻り値はTrueまたはFalseのブール値です。</p>



<pre class="wp-block-code"><code>Sub Testメソッドの例()
    Dim re As Object
    Set re = CreateObject(&quot;VBScript.RegExp&quot;)
    re.Pattern = &quot;d+&quot; '数字が1文字以上続く

    MsgBox re.Test(&quot;注文番号A100&quot;) 'True（100が一致する）
    MsgBox re.Test(&quot;注文番号なし&quot;)  'False（数字がない）
End Sub</code></pre>



<p class="wp-block-paragraph">「一致するものが含まれていればTrue」という単純な動きです。入力チェックやバリデーションにぴったりですね。</p>



<p class="wp-block-paragraph">文字列全体が完全に一致するかを判定したいときは、パターンの先頭に <code>^</code>、末尾に <code>$</code> を付けます。<code>^</code> は文字列の先頭、<code>$</code> は末尾を表すアンカーです。この使い方は実務パターンのメールアドレス検証で詳しく見ていきます。</p>



<p class="wp-block-paragraph">このTestメソッドは、Microsoft 365のワークシート関数<a href="https://mashukabu.com/excel-function-howto-use-regextest/">REGEXTEST</a>と同じ役割を果たします。数式で完結させたいか、マクロで処理したいかで使い分けるとよいですよ。</p>



<h3 class="wp-block-heading"><span id="toc11">Replace：パターン一致部分の置換</span></h3>



<p class="wp-block-paragraph">Replaceメソッドは、パターンに一致した部分を別の文字列に置き換えて返します。<code>Replace(対象文字列, 置換後の文字列)</code> の形で呼び出します。</p>



<pre class="wp-block-code"><code>Sub Replaceメソッドの例()
    Dim re As Object
    Set re = CreateObject(&quot;VBScript.RegExp&quot;)
    re.Pattern = &quot;s+&quot; '空白文字（スペース・タブなど）が1文字以上
    re.Global = True    '全箇所を対象にする

    Dim result As String
    result = re.Replace(&quot;山田　太郎  さん&quot;, &quot;&quot;) '空白をすべて削除
    MsgBox result '「山田太郎さん」が返る
End Sub</code></pre>



<p class="wp-block-paragraph">この例では、半角の空白をまとめて削除しています。<code>s</code> は半角スペースやタブなどの空白文字を表すので、種類を気にせず一括で消せるのが便利です。なお全角スペースの扱いには注意が必要で、これは後述の早見表でくわしく補足します。</p>



<p class="wp-block-paragraph">置換後の文字列に空文字（<code>""</code>）を指定すると、一致部分の「削除」になります。不要な記号の一括削除でよく使うテクニックですよ。なお、一致部分を残したまま前後に文字を足したい場合は、キャプチャグループと後方参照（<code>$1</code> など）を使います。</p>



<p class="wp-block-paragraph">ワークシート関数の<a href="https://mashukabu.com/excel-function-howto-use-regexreplace/">REGEXREPLACE</a>も同じ置換処理を担当します。大量データをループ処理するならVBA、セル単位で完結させるなら関数、という選び方がおすすめです。</p>



<h3 class="wp-block-heading"><span id="toc12">Execute：マッチ結果のコレクション取得</span></h3>



<p class="wp-block-paragraph">Executeメソッドは、一致した箇所の情報をまとめたコレクション（MatchCollection）を返します。「一致したものを取り出したい（抽出したい）」ときに使います。</p>



<pre class="wp-block-code"><code>Sub Executeメソッドの例()
    Dim re As Object
    Set re = CreateObject(&quot;VBScript.RegExp&quot;)
    re.Pattern = &quot;d+&quot; '数字が1文字以上続く
    re.Global = True    '全箇所を取り出す

    Dim matches As Object, m As Object
    Set matches = re.Execute(&quot;価格は1200円、送料は500円&quot;)

    Dim msg As String
    For Each m In matches
        msg = msg &amp; m.Value &amp; vbCrLf '一致した文字列を取り出す
    Next m
    MsgBox msg '「1200」と「500」が改行区切りで表示される
End Sub</code></pre>



<p class="wp-block-paragraph">Executeが返すMatchCollectionは、For Eachで1件ずつ取り出せます。<code>matches.Count</code> で一致件数も取得できます。</p>



<p class="wp-block-paragraph">取り出したMatchオブジェクトには、主に3つのプロパティがあります。</p>



<ul class="wp-block-list"><li><strong>Value</strong>：一致した文字列そのもの</li><li><strong>FirstIndex</strong>：一致が始まった位置（0から数える）</li><li><strong>Length</strong>：一致した文字列の長さ</li></ul>



<p class="wp-block-paragraph">抽出処理は、ワークシート関数の<a href="https://mashukabu.com/excel-function-howto-use-regexextract/">REGEXEXTRACT</a>に対応します。複数件をまとめてループ処理したいときは、VBAのExecuteが力を発揮しますよ。</p>



<h2 class="wp-block-heading"><span id="toc13">よく使うメタ文字と正規表現パターン早見表</span></h2>



<p class="wp-block-paragraph">正規表現は、記号（メタ文字）を組み合わせてパターンを作ります。最初は呪文のように見えますが、よく使う記号は限られています。</p>



<p class="wp-block-paragraph">このセクションは早見表としてまとめました。コードを書いていて「あの記号なんだっけ」となったとき、ここに戻ってくれば大丈夫です。ブックマークしておくと便利ですよ。</p>



<h3 class="wp-block-heading"><span id="toc14">メタ文字一覧（記号・意味・使用例）</span></h3>



<p class="wp-block-paragraph">VBScript RegExpの正規表現は、Perl由来のフレーバーです。基本的なメタ文字は他の言語とほぼ共通です。よく使うものを一覧にしました。</p>



<figure class="wp-block-table"><table><thead><tr><th>記号</th><th>意味</th><th>使用例</th></tr></thead><tbody><tr><td><code>^</code></td><td>文字列の先頭</td><td><code>^A</code> → Aで始まる</td></tr><tr><td><code>$</code></td><td>文字列の末尾</td><td><code>円$</code> → 円で終わる</td></tr><tr><td><code>b</code></td><td>単語境界</td><td><code>bcatb</code> → 単語catだけ</td></tr><tr><td><code>B</code></td><td>単語境界以外</td><td><code>Bcat</code> → 単語の途中のcat</td></tr><tr><td><code>.</code></td><td>改行以外の任意1文字</td><td><code>a.c</code> → axcなど</td></tr><tr><td><code>w</code></td><td>半角英数字とアンダースコア（[a-zA-Z_0-9]）</td><td><code>w+</code> → 英数字の連続</td></tr><tr><td><code>W</code></td><td><code>w</code>以外の文字</td><td><code>W</code> → 記号や空白</td></tr><tr><td><code>d</code></td><td>数字（[0-9]）</td><td><code>d{4}</code> → 数字4桁</td></tr><tr><td><code>D</code></td><td>数字以外の文字</td><td><code>D+</code> → 数字以外の連続</td></tr><tr><td><code>s</code></td><td>空白文字（スペース・タブ・改行など）</td><td><code>s+</code> → 空白の連続</td></tr><tr><td><code>S</code></td><td>空白以外の文字</td><td><code>S+</code> → 空白でない連続</td></tr><tr><td><code>[xyz]</code></td><td>x・y・zのいずれか1文字</td><td><code>[abc]</code> → a/b/c</td></tr><tr><td><code>[^xyz]</code></td><td>x・y・z以外の1文字</td><td><code>[^0-9]</code> → 数字以外</td></tr><tr><td><code>*</code></td><td>直前の0回以上の繰り返し</td><td><code>a*</code> → 空文字やaaa</td></tr><tr><td><code>+</code></td><td>直前の1回以上の繰り返し</td><td><code>a+</code> → a、aaa</td></tr><tr><td><code>?</code></td><td>直前の0または1回</td><td><code>colou?r</code> → colorとcolour</td></tr><tr><td><code>{n}</code></td><td>ちょうどn回</td><td><code>d{3}</code> → 数字ちょうど3桁</td></tr><tr><td><code>{n,}</code></td><td>n回以上</td><td><code>d{2,}</code> → 数字2桁以上</td></tr><tr><td><code>{n,m}</code></td><td>n回以上m回以下</td><td><code>d{2,4}</code> → 数字2〜4桁</td></tr><tr><td><code>(abc)</code></td><td>グループ化・キャプチャ</td><td><code>(d{3})-(d{4})</code></td></tr><tr><td>`a</td><td>b`</td><td>aまたはb</td><td>`cat</td><td>dog` → catかdog</td></tr><tr><td><code>1 2</code></td><td>後方参照</td><td>1番目のグループの再利用</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">ここで1つ大事な注意点があります。<code>w</code> や <code>d</code> は、半角の英数字にしか一致しません。日本語（ひらがな・カタカナ・漢字）や全角の英数字には一致しないのです。</p>



<p class="wp-block-paragraph">日本語を扱いたいときは、文字コードの範囲を直接指定します。たとえばひらがなは <code>[ぁ-ゖ]</code>、カタカナは <code>[ァ-ヺ]</code> のように書きます。全角英数字の扱いは、後半の実務パターンで具体的に解説しますよ。</p>



<h3 class="wp-block-heading"><span id="toc15">実務でよく使うパターン集8選</span></h3>



<p class="wp-block-paragraph">実務でそのまま使えるパターンを8つ厳選しました。Patternプロパティに貼り付けて使えます。コピペ用にどうぞ。</p>



<figure class="wp-block-table"><table><thead><tr><th>用途</th><th>パターン</th></tr></thead><tbody><tr><td>メールアドレス形式（完全一致）</td><td><code>^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,}$</code></td></tr><tr><td>電話番号（ハイフン区切り）</td><td><code>^0d{1,4}-d{1,4}-d{4}$</code></td></tr><tr><td>郵便番号（3桁-4桁）</td><td><code>d{3}-d{4}</code></td></tr><tr><td>半角数字のみ</td><td><code>^d+$</code></td></tr><tr><td>URL（httpまたはhttps）</td><td><code>https?://[w./%#&?=-]+</code></td></tr><tr><td>全角英数字の検出</td><td><code>[Ａ-Ｚａ-ｚ０-９]+</code></td></tr><tr><td>日付（YYYY/MM/DD形式）</td><td><code>d{4}/d{1,2}/d{1,2}</code></td></tr><tr><td>前後の空白（全角・半角）</td><td>`^[s　]+</td><td>[s　]+$`</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">最後の空白パターンにある <code>　</code> は全角スペースです。VBScript RegExpの <code>s</code> は半角スペースやタブを対象とし、全角スペース（U+3000）には一致しません。全角も確実に対象にしたいときは、このように全角スペースを文字クラスへ明示的に含めると安心ですよ。</p>



<p class="wp-block-paragraph">それでは、これらのパターンを使った実務コードを次のセクションで見ていきましょう。</p>



<h2 class="wp-block-heading"><span id="toc16">実務パターン5選：コピペで使えるサンプルコード</span></h2>



<p class="wp-block-paragraph">ここからは、実務でそのまま使える5つのパターンを、完成コードとして紹介します。すべてコピペして動かせるように書いています。</p>



<p class="wp-block-paragraph">5つのパターンは次のとおりです。</p>



<ol class="wp-block-list"><li>メールアドレス形式チェック</li><li>電話番号ハイフン統一</li><li>郵便番号抽出</li><li>全角英数字→半角変換</li><li>不要な記号一括削除</li></ol>



<p class="wp-block-paragraph">それぞれ「どんな場面で使うか」と「コードの中で何が起きているか」を添えています。自分の業務に合わせてパターンを書き換えれば、応用も簡単ですよ。</p>



<p class="wp-block-paragraph">なお、これらのコードを保存するときは、必ずマクロ有効ブック（.xlsm）形式で保存してください。通常の.xlsx形式ではマクロが保存されず、次に開いたときに消えてしまいます。</p>



<h3 class="wp-block-heading"><span id="toc17">①メールアドレス形式チェック</span></h3>



<p class="wp-block-paragraph">入力された文字列が、メールアドレスの形式として正しいかを判定するコードです。フォーム入力や名簿のチェックで活躍します。</p>



<pre class="wp-block-code"><code>Sub メールアドレス形式チェック()
    Dim re As Object
    Set re = CreateObject(&quot;VBScript.RegExp&quot;)

    'メールアドレスの形式パターン（完全一致のため^と$で囲む）
    re.Pattern = &quot;^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,}$&quot;
    re.IgnoreCase = True '大文字小文字を区別しない

    Dim 対象 As String
    対象 = Range(&quot;A1&quot;).Value 'A1セルの値をチェック対象にする

    If re.Test(対象) Then
        Range(&quot;B1&quot;).Value = &quot;OK&quot; '形式が正しい
    Else
        Range(&quot;B1&quot;).Value = &quot;形式エラー&quot; '形式が不正
    End If
End Sub</code></pre>



<p class="wp-block-paragraph">パターンを前から読み解いてみます。<code>^[A-Za-z0-9._%+-]+</code> はアットマークの前の部分で、英数字や一部記号が1文字以上。<code>@</code> でアットマーク。<code>[A-Za-z0-9.-]+</code> がドメイン名。<code>.[A-Za-z]{2,}$</code> で、最後にドットと2文字以上のアルファベットが来て終わる、という意味です。</p>



<p class="wp-block-paragraph"><code>^</code> と <code>$</code> で囲むことで「文字列全体がこの形か」を判定しています。これがないと、余計な文字が混じっていても一致してしまうので注意してくださいね。</p>



<p class="wp-block-paragraph">なお、このパターンは厳密なRFC準拠ではありません。ただ、実務上のチェックとしては十分な精度がありますよ。</p>



<h3 class="wp-block-heading"><span id="toc18">②電話番号ハイフン統一</span></h3>



<p class="wp-block-paragraph">ハイフンが入っていたり省略されていたりとバラバラな電話番号を、判定するコードです。まずは「正しいハイフン区切りになっているか」をチェックします。</p>



<pre class="wp-block-code"><code>Sub 電話番号フォーマットチェック()
    Dim re As Object
    Set re = CreateObject(&quot;VBScript.RegExp&quot;)

    '0始まり、ハイフン区切りの電話番号パターン
    re.Pattern = &quot;^0d{1,4}-d{1,4}-d{4}$&quot;

    Dim i As Long
    Dim 最終行 As Long
    最終行 = Cells(Rows.Count, 1).End(xlUp).Row 'A列の最終行を取得

    For i = 1 To 最終行
        If re.Test(Cells(i, 1).Value) Then
            Cells(i, 2).Value = &quot;OK&quot; '形式が正しい
        Else
            Cells(i, 2).Value = &quot;要確認&quot; 'ハイフンの位置が不正
        End If
    Next i
End Sub</code></pre>



<p class="wp-block-paragraph">パターンの <code>^0d{1,4}</code> は、0で始まり数字が1〜4桁続く市外局番の部分です。<code>-d{1,4}</code> が市内局番、<code>-d{4}$</code> が末尾の4桁を表します。固定電話と携帯電話の両方をカバーできる、ゆるめのパターンです。</p>



<p class="wp-block-paragraph">ハイフンを除去して数字だけに統一したい場合は、Replaceメソッドを使います。次のように1行で書けますよ。</p>



<pre class="wp-block-code"><code>Sub 電話番号からハイフン削除()
    Dim re As Object
    Set re = CreateObject(&quot;VBScript.RegExp&quot;)
    re.Pattern = &quot;-&quot; 'ハイフンを対象にする
    re.Global = True  '全箇所を削除する

    Range(&quot;C1&quot;).Value = re.Replace(Range(&quot;A1&quot;).Value, &quot;&quot;)
    '例: 03-1234-5678 → 0312345678
End Sub</code></pre>



<p class="wp-block-paragraph">ちなみに、このパターンは「+81」で始まる国際電話番号の形式には対応していません。国内の番号を前提としていますので、海外の連絡先を扱うときは別途調整してくださいね。</p>



<h3 class="wp-block-heading"><span id="toc19">③郵便番号抽出</span></h3>



<p class="wp-block-paragraph">住所が1つのセルにまとめて入力されていて、その中から郵便番号だけを取り出したいケースです。Executeメソッドで抽出します。</p>



<pre class="wp-block-code"><code>Sub 郵便番号を抽出()
    Dim re As Object
    Set re = CreateObject(&quot;VBScript.RegExp&quot;)

    re.Pattern = &quot;d{3}-d{4}&quot; '数字3桁-数字4桁
    re.Global = True            '複数あれば全部取り出す

    Dim matches As Object
    Set matches = re.Execute(Range(&quot;A1&quot;).Value) 'A1から抽出

    If matches.Count &gt; 0 Then
        Range(&quot;B1&quot;).Value = matches(0).Value '最初に見つかった郵便番号
    Else
        Range(&quot;B1&quot;).Value = &quot;見つかりません&quot;
    End If
End Sub</code></pre>



<p class="wp-block-paragraph"><code>d{3}-d{4}</code> というパターンで、「数字3桁・ハイフン・数字4桁」という郵便番号の形を表しています。<code>matches(0).Value</code> で、最初に見つかった郵便番号を取り出しています。</p>



<p class="wp-block-paragraph"><code>matches.Count</code> で一致件数を確認してから処理しているのがポイントです。1件も見つからないときに <code>matches(0)</code> へアクセスするとエラーになるので、この件数チェックでガードしています。</p>



<p class="wp-block-paragraph">複数の郵便番号が含まれる文字列なら、For Eachループですべて取り出せます。Executeは抽出処理の万能選手ですよ。</p>



<h3 class="wp-block-heading"><span id="toc20">④全角英数字→半角変換</span></h3>



<p class="wp-block-paragraph">全角で入力された「ＡＢＣ１２３」のような英数字を、半角の「ABC123」に変換するコードです。RegExpとStrConv関数を組み合わせます。</p>



<p class="wp-block-paragraph">ここで大事なのは、RegExp単体では全角から半角への「変換」はできない、という点です。RegExpは「全角英数字の場所を見つける」役割、実際の変換はVBA標準のStrConv関数が担当します。役割分担で乗り切ります。</p>



<pre class="wp-block-code"><code>Sub 全角英数字を半角に変換()
    Dim re As Object
    Set re = CreateObject(&quot;VBScript.RegExp&quot;)

    re.Pattern = &quot;[Ａ-Ｚａ-ｚ０-９]+&quot; '全角の英大文字・英小文字・数字
    re.Global = True                  '全箇所を対象にする

    Dim 元 As String
    元 = Range(&quot;A1&quot;).Value

    Dim matches As Object, m As Object
    Set matches = re.Execute(元)

    Dim 結果 As String
    結果 = 元
    For Each m In matches
        '見つけた全角部分をStrConvで半角に変換し、置き換える
        結果 = Replace(結果, m.Value, StrConv(m.Value, vbNarrow))
    Next m

    Range(&quot;B1&quot;).Value = 結果 '例: ＡＢＣ１２３ → ABC123
End Sub</code></pre>



<p class="wp-block-paragraph">処理の流れを整理します。まずExecuteで全角英数字のかたまりを見つけます。次に、見つけた1つひとつを <code>StrConv(m.Value, vbNarrow)</code> で半角に変換します。そして、VBA標準のReplace関数で元の全角部分を半角に置き換えています。</p>



<p class="wp-block-paragraph"><code>vbNarrow</code> は「全角を半角に変換する」というStrConvの定数です。逆に半角を全角にしたいときは <code>vbWide</code> を使います。</p>



<p class="wp-block-paragraph">文字列の中の英数字だけを半角に揃えたいときに重宝します。日本語の住所や氏名はそのまま残して、英数字だけ整える、といった処理にぴったりですよ。</p>



<h3 class="wp-block-heading"><span id="toc21">⑤不要な記号一括削除</span></h3>



<p class="wp-block-paragraph">文字列に紛れ込んだ全角記号などを、まとめて削除するコードです。コピペで持ち込んだデータに余計な装飾記号が付いている、なんてときに使えます。</p>



<pre class="wp-block-code"><code>Sub 不要な記号を一括削除()
    Dim re As Object
    Set re = CreateObject(&quot;VBScript.RegExp&quot;)

    '削除したい全角記号を明示的に列挙する（誤削除を防ぐため）
    re.Pattern = &quot;[★☆※→←【】「」（）・]+&quot;
    re.Global = True 'すべての一致箇所を削除する

    Range(&quot;B1&quot;).Value = re.Replace(Range(&quot;A1&quot;).Value, &quot;&quot;)
    '例: 【重要】★お知らせ → 重要お知らせ
End Sub</code></pre>



<p class="wp-block-paragraph"><code>re.Replace(対象, "")</code> のように置換後を空文字にすることで、一致した記号をすべて削除しています。GlobalをTrueにしているので、何個あっても一度で消えます。</p>



<p class="wp-block-paragraph">ここでのポイントは、削除したい記号を <code>[★☆※→…]</code> のように1つずつ明示的に列挙していることです。<code>[！-／]</code> のような広い範囲指定もできますが、範囲指定は思わぬ文字まで巻き込んで消してしまうリスクがあります。</p>



<p class="wp-block-paragraph">大切なデータを扱うときほど、「消したい記号だけを並べる」やり方が安全です。少し手間でも、誤削除を防げると考えれば安いものですよ。</p>



<h2 class="wp-block-heading"><span id="toc22">エラー処理：不正パターン入力時の対策</span></h2>



<p class="wp-block-paragraph">正規表現は便利ですが、パターンの書き方を間違えると実行時エラーになります。特に、パターンをユーザー入力やセルの値から動的に組み立てる場合は要注意です。</p>



<p class="wp-block-paragraph">たとえば閉じカッコのない <code>(d+</code> のような不正なパターンをセットするとします。TestやExecuteの実行時にエラーが発生して、マクロが止まってしまいます。</p>



<p class="wp-block-paragraph">こうした事故を防ぐために、エラー処理を組み込んでおきましょう。マクロを安全に動かすための、最後のひと工夫です。</p>



<h3 class="wp-block-heading"><span id="toc23">On Error GoToでRegExpエラーを捕捉する</span></h3>



<p class="wp-block-paragraph">VBAでエラーを捕捉する基本は、On Error GoToステートメントです。エラーが起きたら指定したラベルへジャンプし、メッセージを出して安全に処理を終えられます。</p>



<pre class="wp-block-code"><code>Sub エラー処理つきパターン判定()
    Dim re As Object
    Set re = CreateObject(&quot;VBScript.RegExp&quot;)

    On Error GoTo エラー処理 'エラー発生時はラベルへジャンプ

    re.Pattern = Range(&quot;A1&quot;).Value 'セルからパターンを取得（不正かもしれない）
    Dim 結果 As Boolean
    結果 = re.Test(Range(&quot;B1&quot;).Value) '判定を実行

    MsgBox &quot;判定結果: &quot; &amp; 結果
    Exit Sub '正常終了（エラー処理を通らないようExit）

エラー処理:
    MsgBox &quot;パターンが不正です: &quot; &amp; Err.Description '原因を表示
End Sub</code></pre>



<p class="wp-block-paragraph"><code>On Error GoTo エラー処理</code> を宣言しておくと、その後でエラーが起きた瞬間に「エラー処理:」ラベルへ飛びます。<code>Err.Description</code> には、エラーの内容が文字列で入っているので、原因の確認に役立ちます。</p>



<p class="wp-block-paragraph">注意したいのが、正常終了の直前に置いた <code>Exit Sub</code> です。これがないと、エラーがなくてもそのままエラー処理ラベルの中身まで実行してしまいます。「成功したのにエラーメッセージが出る」という妙な動きを防ぐための、お約束のひと言ですよ。</p>



<p class="wp-block-paragraph">On Errorの3つの形式（GoToラベル・Resume Next・GoTo 0）の使い分けは、<a href="https://mashukabu.com/vba-error-handling-complete-guide/">VBAのエラーハンドリング完全ガイド｜On Error GoToとResume Nextの使い分け</a>で詳しく解説しています。あわせて読むと理解が深まりますよ。</p>



<h3 class="wp-block-heading"><span id="toc24">パターン検証関数を作っておくと安全</span></h3>



<p class="wp-block-paragraph">同じエラー処理を何度も書くのは面倒ですよね。そこで、「このパターンは有効か」を判定する関数を1つ作っておくと、使い回せて便利です。</p>



<pre class="wp-block-code"><code>'パターンが有効ならTrue、不正ならFalseを返す関数
Function パターンは有効か(ByVal pat As String) As Boolean
    Dim re As Object
    Set re = CreateObject(&quot;VBScript.RegExp&quot;)

    On Error GoTo 不正 'エラーが出たら不正ラベルへ
    re.Pattern = pat
    re.Test &quot;テスト&quot; '実際に試して動くか確認する

    パターンは有効か = True '問題なければTrue
    Exit Function

不正:
    パターンは有効か = False 'エラーが出たらFalse
End Function</code></pre>



<p class="wp-block-paragraph">この関数を使えば、本処理の前に <code>If パターンは有効か(パターン文字列) Then</code> のように安全確認ができます。不正なパターンが来ても、マクロが止まらず分岐で対処できるわけです。</p>



<p class="wp-block-paragraph">ユーザーが自由にパターンを入力できるツールを作るときは、この検証関数が頼りになります。「まず安全確認、それから本処理」の流れを習慣にしておくと安心ですよ。</p>



<h2 class="wp-block-heading"><span id="toc25">ワークシート関数との使い分け</span></h2>



<p class="wp-block-paragraph">ここまでVBAの正規表現を見てきましたが、実はMicrosoft 365には正規表現を使えるワークシート関数もあります。REGEXTEST・REGEXREPLACE・REGEXEXTRACTの3つです。</p>



<p class="wp-block-paragraph">「じゃあ関数とVBA、どっちを使えばいいの」と迷いますよね。それぞれ得意な場面が違うので、ここで整理しておきます。</p>



<p class="wp-block-paragraph">結論から言うと、セル単位で完結する処理は関数、繰り返しや条件分岐を含む処理はVBA、という分け方が基本です。</p>



<h3 class="wp-block-heading"><span id="toc26">REGEXTEST・REGEXREPLACE・REGEXEXTRACTとの違い</span></h3>



<p class="wp-block-paragraph">ワークシート関数の3つは、VBAのRegExpメソッドとほぼ対応しています。対応関係を表にまとめました。</p>



<figure class="wp-block-table"><table><thead><tr><th>やりたいこと</th><th>ワークシート関数</th><th>VBA RegExp</th></tr></thead><tbody><tr><td>パターン一致チェック</td><td>REGEXTEST</td><td>Testメソッド</td></tr><tr><td>パターン一致部分の置換</td><td>REGEXREPLACE</td><td>Replaceメソッド</td></tr><tr><td>パターン一致部分の抽出</td><td>REGEXEXTRACT</td><td>Executeメソッド</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">ワークシート関数の大きな利点は、数式を入れるだけで使える手軽さです。プログラミングの知識がなくても、セルに <code>=REGEXTEST(A1,"d+")</code> と書くだけで判定できます。</p>



<p class="wp-block-paragraph">ただし、ワークシート関数はMicrosoft 365専用です。Excel 2019や2021では使えません。一方、VBAのRegExpはどのバージョンでも動くという強みがあります。</p>



<p class="wp-block-paragraph">それぞれの関数の詳しい使い方は、<a href="https://mashukabu.com/excel-function-howto-use-regextest/">REGEXTEST関数</a>・<a href="https://mashukabu.com/excel-function-howto-use-regexreplace/">REGEXREPLACE関数</a>・<a href="https://mashukabu.com/excel-function-howto-use-regexextract/">REGEXEXTRACT関数</a>の各記事を参考にしてくださいね。</p>



<h3 class="wp-block-heading"><span id="toc27">VBA RegExpを選ぶべきシーン</span></h3>



<p class="wp-block-paragraph">では、どんなときにVBAの正規表現を選ぶべきでしょうか。次のような場面ではVBAが向いています。</p>



<ul class="wp-block-list"><li>数百行・数千行をまとめて一括処理したいとき（ループ処理が速い）</li><li>「一致したらこのシートへ転記」のように条件分岐を伴うとき</li><li>全角→半角変換のように、StrConvなど他の関数と組み合わせたいとき</li><li>Microsoft 365以外（Excel 2019・2021）の環境で正規表現を使いたいとき</li><li>ボタン一発で実行する定型業務に組み込みたいとき</li></ul>



<p class="wp-block-paragraph">逆に、1つのセルの判定や置換で済むなら、わざわざマクロを書く必要はありません。ワークシート関数のほうが手早く片付きます。</p>



<p class="wp-block-paragraph">ちなみに、Googleスプレッドシートにも正規表現を使える関数があります。スプレッドシートでの置換は<a href="https://mashukabu.com/spreadsheet-regexreplace-function/">スプレッドシートのREGEXREPLACE関数</a>で解説していますので、Sheetsを使う方はそちらもどうぞ。</p>



<p class="wp-block-paragraph">ツールに応じて使い分ければ、文字列処理の悩みはほとんど解決できますよ。</p>



<h2 class="wp-block-heading"><span id="toc28">まとめ</span></h2>



<p class="wp-block-paragraph">VBAの正規表現（RegExp）について、準備から実務パターンまで解説してきました。最後に要点を振り返ります。</p>



<ul class="wp-block-list"><li>正規表現は「形のパターン」での判定・抽出・置換が得意で、TRIMやSUBSTITUTEでは難しい処理を一気にシンプルにできる</li><li>RegExpオブジェクトは「参照設定（早期バインディング）」か「CreateObject（遅延バインディング）」で用意する。自分用は早期、配布用は遅延が目安</li><li>覚えるのは3つのプロパティ（Pattern・Global・IgnoreCase）と3つのメソッド（Test・Replace・Execute）だけ</li><li>日本語や全角文字は <code>w</code> や <code>d</code> に一致しないので、文字コード範囲で指定する</li><li>不正なパターンに備えて、On Error GoToや検証関数でエラー処理を入れておくと安全</li><li>セル単位の処理はワークシート関数、ループや条件分岐を伴う処理はVBAと使い分ける</li></ul>



<p class="wp-block-paragraph">正規表現は最初こそ記号の羅列に見えますが、よく使うパターンは限られています。この記事の早見表とサンプルコード5本を手元に置いておけば、実務の文字列処理でつまずくことはぐっと減りますよ。</p>



<p class="wp-block-paragraph">まずは身近なデータで、メールアドレスチェックや郵便番号抽出から試してみてください。一度コツをつかめば、これまで手作業でやっていた面倒なクレンジングが、ボタン一発で片付くようになりますよ。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/excel-vba-regexp-howto/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
