<?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; まったりエンジニア</title>
	<atom:link href="https://javeo.jp/tag/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE/feed/" rel="self" type="application/rss+xml" />
	<link>https://javeo.jp</link>
	<description>ほどほどレベルのプログラミング</description>
	<lastBuildDate>Wed, 03 Jun 2026 14:14:37 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://javeo.jp/wp-content/uploads/2026/05/cropped-サイトアイコン2-32x32.png</url>
	<title>正規表現 &#8211; まったりエンジニア</title>
	<link>https://javeo.jp</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Excelで正規表現！REGEX関数3つの使い方</title>
		<link>https://javeo.jp/excel-regex/</link>
					<comments>https://javeo.jp/excel-regex/#respond</comments>
		
		<dc:creator><![CDATA[ジャベ雄]]></dc:creator>
		<pubDate>Wed, 03 Jun 2026 14:08:50 +0000</pubDate>
				<category><![CDATA[Excel・VBA]]></category>
		<category><![CDATA[初心者]]></category>
		<category><![CDATA[正規表現]]></category>
		<guid isPermaLink="false">https://javeo.jp/?p=4427</guid>

					<description><![CDATA[<p><img src="https://javeo.jp/wp-content/uploads/2026/06/excel-regex-1024x538.jpg" class="webfeedsFeaturedVisual" /></p>2024年から、Excelに正規表現を扱う関数が3つ追加されました これまで文字列を抜き出したり整えたりするのに、VBAでVBScriptのRegExpを呼んだり、LEFT・MID・FINDあたりを組み合わせて頑張ってた [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://javeo.jp/wp-content/uploads/2026/06/excel-regex-1024x538.jpg" class="webfeedsFeaturedVisual" /></p><div class="codoc-evacuations" style="display:none;" data-shortcode=""></div>
<p class="wp-block-paragraph">2024年から、Excelに正規表現を扱う関数が3つ追加されました</p>



<p class="wp-block-paragraph">これまで文字列を抜き出したり整えたりするのに、VBAでVBScriptのRegExpを呼んだり、LEFT・MID・FINDあたりを組み合わせて頑張ってたわけですが、それが関数1つで書けるようになったってことです</p>



<p class="wp-block-paragraph">私自身、PythonでのスクレイピングやVBAでわりと正規表現を使ってきた側なんですが、Excelのセルにそのまま正規表現を書けるのは地味に助かるなと思ってます、別シートにマクロを仕込まなくても、関数だけで完結するのが大きいんですよね</p>



<p class="wp-block-paragraph">この記事ではその<strong>REGEXTEST・REGEXEXTRACT・REGEXREPLACE</strong>の3つについて、構文と引数、実際の数式の例、事務作業での使いどころをまとめていきます</p>



<h2 class="wp-block-heading">ExcelのREGEX関数とは（使えるバージョンに注意）</h2>



<p class="wp-block-paragraph">ExcelのREGEX関数は、セルの中の文字列を<strong>正規表現</strong>でチェックしたり、抜き出したり、置き換えたりするための関数です、用意されてるのは次の3つ</p>



<figure class="wp-block-table is-style-stripes"><table><thead><tr><th>関数</th><th>やること</th><th>戻り値</th></tr></thead><tbody><tr><td>REGEXTEST</td><td>パターンに一致するか判定する</td><td>TRUE / FALSE</td></tr><tr><td>REGEXEXTRACT</td><td>一致した部分を抜き出す</td><td>テキスト</td></tr><tr><td>REGEXREPLACE</td><td>一致した部分を置き換える</td><td>テキスト</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">名前のとおり、TEST=判定、EXTRACT=抽出、REPLACE=置換という役割分担になっていて、この3つを覚えれば文字列処理のだいたいの場面はカバーできます</p>



<p class="wp-block-paragraph">ただ1つ注意したいのが、使えるExcelが限られるという点です</p>



<div class="wp-block-group is-style-big_icon_caution"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph">REGEX関数が使えるのは<strong><span class="swl-marker mark_yellow" style="color:#e8313b">Microsoft 365（サブスク版）</span></strong>だけです、買い切りのExcel 2021やExcel 2024には入っていないので、その環境では使えません</p>
</div></div>



<p class="wp-block-paragraph">2024年5月にプレビューとして登場して、その後Windows・Mac・Webの各Microsoft 365で正式に使えるようになりました、Insider（先行プレビュー版）への参加もいりません</p>



<p class="wp-block-paragraph">自分のExcelがどっちか分からないときは、空いてるセルに<code>=REGEXTEST("a","a")</code>とでも打ってみてください、エラー（#NAME?）が出るなら、その環境にはまだREGEX関数が来てないってことになります</p>



<p class="wp-block-paragraph">もう1つ、正規表現の方言（フレーバー）の話です、ExcelのREGEX関数は<strong><span class="swl-marker mark_yellow">PCRE2</span></strong>という、多くのツールが採用しているフレーバーを使っています、後で出てくるVBAのVBScript RegExpとは細かい書き方が違う部分があるので、そこだけ頭の片隅に置いておくといいです</p>



<h2 class="wp-block-heading">正規表現の基礎は別記事にまとめてあります</h2>



<p class="wp-block-paragraph">この記事はExcelのREGEX関数の使い方に集中したいので、正規表現そのものの基礎（メタ文字とか<strong>\d</strong>・<strong>\w</strong>といった定義済みパターン）はここでは説明しません</p>



<p class="wp-block-paragraph">「<strong>\d</strong>って何だっけ」「<strong>[0-9]</strong>と<strong>[^0-9]</strong>の違いが曖昧」みたいな、記号の意味そのものがあやしい方は、先にこっちを読んでもらえると以降の数式がスッと入ってきます、郵便番号や電話番号などのよく使うパターンの早見表も載せてあります</p>



<div class="wp-block-group is-style-big_icon_point"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph">正規表現の基本ルールは <a href="https://javeo.jp/regexp-beginner/" target="_blank" rel="noopener noreferrer">正規表現とは？拒否反応が出る人向けに基本とよく使うパターンを整理</a> でまとめています、メタ文字の早見表・定義済みパターン・よく使うパターン集つきです</p>
</div></div>



<p class="wp-block-paragraph">以下では、この記事に出てくるパターンに簡単な補足は添えますが、深い解説は上の記事にお任せして進めていきます</p>



<h2 class="wp-block-heading">REGEXTEST（パターンに一致するか判定する）</h2>



<p class="wp-block-paragraph">まずは一番シンプルな<strong>REGEXTEST</strong>から、これは「セルの中身がパターンに一致するか？」を<strong>TRUE / FALSE</strong>で返してくれる関数です</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-text" data-lang="Excelの数式"><code>=REGEXTEST(text, pattern, [case_sensitivity])</code></pre></div>



<figure class="wp-block-table is-style-stripes"><table><thead><tr><th>引数</th><th>意味</th></tr></thead><tbody><tr><td>text</td><td>調べたい文字列（セル参照でOK）</td></tr><tr><td>pattern</td><td>正規表現のパターン</td></tr><tr><td>case_sensitivity</td><td>省略可、0=大文字小文字を区別（既定）/ 1=区別しない</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">ポイントは、textの<strong><span class="swl-marker mark_yellow">どこか一部でもパターンに一致すればTRUE</span></strong>になるところです、全体がきっちり一致してる必要はありません</p>



<p class="wp-block-paragraph">例えばA2セルに数字が含まれているか調べたいなら、こんな感じ</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-text" data-lang="Excelの数式"><code>=REGEXTEST(A2,"[0-9]")</code></pre></div>



<p class="wp-block-paragraph">A2セルに1個でも数字（<strong>[0-9]</strong>）があればTRUE、まったく無ければFALSEが返ります</p>



<p class="wp-block-paragraph">メールアドレスっぽいかをざっくり判定したいなら、@が入ってるかどうかだけでも目印になります</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-text" data-lang="Excelの数式"><code>=REGEXTEST(A2,"@")</code></pre></div>



<p class="wp-block-paragraph">これはあくまで「@を含むか」の簡易チェックなので、ちゃんとしたメール形式かまで見たいなら後で出てくる抽出のパターンを応用する形になります</p>



<p class="wp-block-paragraph">大文字小文字を区別したくないときは、3つ目の引数に1を渡します、例えば<strong>&#8220;abc&#8221;</strong>でも<strong>&#8220;ABC&#8221;</strong>でも引っかけたいケースですね</p>



<h2 class="wp-block-heading">REGEXEXTRACT（一致した部分を抜き出す）</h2>



<p class="wp-block-paragraph">次は抜き出し担当の<strong>REGEXEXTRACT</strong>です、文字列の中からパターンに一致した部分だけを取り出してくれます、住所から郵便番号だけ、文章からメアドだけ、みたいな使い方ができます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-text" data-lang="Excelの数式"><code>=REGEXEXTRACT(text, pattern, [return_mode], [case_sensitivity])</code></pre></div>



<p class="wp-block-paragraph">引数で重要なのが3つ目の<strong>return_mode</strong>で、これで「何を返すか」が変わります</p>



<figure class="wp-block-table is-style-stripes"><table><thead><tr><th>return_mode</th><th>返すもの</th></tr></thead><tbody><tr><td>0（既定）</td><td>最初に一致した1件</td></tr><tr><td>1</td><td>一致した全件を配列で（スピルして縦に並ぶ）</td></tr><tr><td>2</td><td>最初に一致したキャプチャグループを配列で</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">case_sensitivity（4つ目）はREGEXTESTと同じで、0=区別する（既定）/ 1=区別しない、です</p>



<h3 class="wp-block-heading">郵便番号を抜き出す（return_mode 0）</h3>



<p class="wp-block-paragraph">A2セルに「東京都千代田区永田町1-7-1 100-8981」みたいな住所文字列が入っているとして、そこから郵便番号だけ取り出したいとします</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-text" data-lang="Excelの数式"><code>=REGEXEXTRACT(A2,"\d{3}-\d{4}")</code></pre></div>



<p class="wp-block-paragraph"><strong>\d{3}-\d{4}</strong>は「数字3つ・ハイフン・数字4つ」というパターンなので、100-8981の部分が抜き出されます、return_modeを省略してるので、最初に一致した1件だけが返る形です</p>



<h3 class="wp-block-heading">メールアドレスを抜き出す（簡易版）</h3>



<p class="wp-block-paragraph">文章の中からメアドを抜きたいときは、こんなパターンが使えます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-text" data-lang="Excelの数式"><code>=REGEXEXTRACT(A2,"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}")</code></pre></div>



<p class="wp-block-paragraph">@の前後とドメイン部分をざっくり拾うパターンです、ただしこれは<strong><span class="swl-marker mark_yellow">あくまで簡易版</span></strong>で、世の中のメアドの仕様を完全に網羅したものではありません、社内の名簿から拾うくらいの用途なら十分実用になります</p>



<h3 class="wp-block-heading">数字のかたまりを全部抜き出す（return_mode 1）</h3>



<p class="wp-block-paragraph">1件だけじゃなくて、一致したもの全部が欲しいときはreturn_modeに1を渡します</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-text" data-lang="Excelの数式"><code>=REGEXEXTRACT(A2,"\d+",1)</code></pre></div>



<p class="wp-block-paragraph"><strong>\d+</strong>は「数字が1つ以上続くかたまり」なので、A2セルの中にある数字のかたまりが全部、縦にスピル（自動で複数セルに展開）して並びます、文字列に散らばった数値をまとめて拾いたいときに便利です</p>



<h3 class="wp-block-heading">年・月・日に分解する（return_mode 2）</h3>



<p class="wp-block-paragraph">カッコ<strong>( )</strong>で囲った部分（キャプチャグループ）だけを取り出したいときはreturn_modeに2を渡します、日付を年・月・日にバラすのが分かりやすい例です</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-text" data-lang="Excelの数式"><code>=REGEXEXTRACT("2024-05-20","(\d{4})-(\d{2})-(\d{2})",2)</code></pre></div>



<p class="wp-block-paragraph">3つのグループ<strong>(\d{4})</strong>・<strong>(\d{2})</strong>・<strong>(\d{2})</strong>に分けてあるので、2024・05・20の3つが配列で返ります、横にスピルして年・月・日が別セルに並ぶイメージですね</p>



<div class="wp-block-group is-style-big_icon_caution"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph">REGEX関数の戻り値は<strong><span class="swl-marker mark_yellow" style="color:#e8313b">テキスト（文字列）</span></strong>です、抜き出した郵便番号や数字をそのまま計算に使おうとすると文字列扱いでうまくいかないことがあるので、数値として使いたいときは<strong>VALUE関数</strong>で囲って数値に変換してください</p>
</div></div>



<p class="wp-block-paragraph">例えば数字のかたまりを数値にしたいなら、<code>=VALUE(REGEXEXTRACT(A2,"\d+"))</code>のように包む形になります</p>



<h2 class="wp-block-heading">REGEXREPLACE（一致した部分を置き換える）</h2>



<p class="wp-block-paragraph">3つ目は置換担当の<strong>REGEXREPLACE</strong>です、パターンに一致した部分を別の文字列に差し替えます、不要な文字を消したり、伏せ字にしたり、並べ替えたりできます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-text" data-lang="Excelの数式"><code>=REGEXREPLACE(text, pattern, replacement, [occurrence], [case_sensitivity])</code></pre></div>



<figure class="wp-block-table is-style-stripes"><table><thead><tr><th>引数</th><th>意味</th></tr></thead><tbody><tr><td>text</td><td>元の文字列</td></tr><tr><td>pattern</td><td>正規表現のパターン</td></tr><tr><td>replacement</td><td>置き換え後の文字列（$1 $2 でグループ参照できる）</td></tr><tr><td>occurrence</td><td>省略可、0=全て置換（既定）/ 正のN=N番目だけ / 負の数=末尾から数える</td></tr><tr><td>case_sensitivity</td><td>省略可、0=区別（既定）/ 1=区別しない</td></tr></tbody></table></figure>



<h3 class="wp-block-heading">数字だけ残して他を消す</h3>



<p class="wp-block-paragraph">電話番号などで、ハイフンやカッコが混ざってるのを取り払って数字だけにしたいときの定番がこれ</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-text" data-lang="Excelの数式"><code>=REGEXREPLACE(A2,"[^0-9]","")</code></pre></div>



<p class="wp-block-paragraph"><strong>[^0-9]</strong>は「数字以外の文字」という意味なので、それを空文字（&#8221;&#8221;）に置き換える＝<strong><span class="swl-marker mark_yellow">数字以外を全部消す</span></strong>動きになります、occurrenceを省略すると既定で全部が対象です</p>



<h3 class="wp-block-heading">電話番号の中央を伏せ字にする</h3>



<p class="wp-block-paragraph">個人情報を一覧で見せるときに、電話番号の真ん中をマスクしたいことがあります</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-text" data-lang="Excelの数式"><code>=REGEXREPLACE("090-1234-5678","-\d{4}-","-****-")</code></pre></div>



<p class="wp-block-paragraph">「ハイフン・数字4つ・ハイフン」の部分を「-****-」に置き換えてるので、結果は<strong>090-****-5678</strong>になります、真ん中の4桁だけ隠せるってわけです</p>



<h3 class="wp-block-heading">姓名を並べ替える（$1 $2 を使う）</h3>



<p class="wp-block-paragraph">replacementの中では<strong>$1</strong>・<strong>$2</strong>でキャプチャグループを参照できます、これを使うと並べ替えができます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-text" data-lang="Excelの数式"><code>=REGEXREPLACE("SoniaBrown","([A-Z][a-z]+)([A-Z][a-z]+)","$2, $1")</code></pre></div>



<p class="wp-block-paragraph">1つ目のグループ（Sonia）を<strong>$1</strong>、2つ目（Brown）を<strong>$2</strong>として、「$2, $1」の順で並べ直しているので、結果は<strong>Brown, Sonia</strong>になります、姓・名の順番を入れ替えたいときなどに応用が利きます</p>



<h2 class="wp-block-heading">実務での使いどころ</h2>



<p class="wp-block-paragraph">ここまでの3関数を、日々の事務作業に当てはめるとこんな使い方ができます、どれもさっきまでの数式の組み合わせで対応できる範囲です</p>


<div class="c-scrollHint sp_"><span>スクロールできます <i class="icon-more_arrow"></i></span></div>
<figure data-table-scrollable="sp" class="wp-block-table is-style-stripes"><table style="--table-width:800px;"><thead><tr><th>やりたいこと</th><th>使う関数</th><th>パターン例</th></tr></thead><tbody><tr><td>住所から郵便番号を抜く</td><td>REGEXEXTRACT</td><td>\d{3}-\d{4}</td></tr><tr><td>文章からメアドを拾う</td><td>REGEXEXTRACT</td><td>[A-Za-z0-9._%+-]+@…</td></tr><tr><td>電話番号を数字だけに整形</td><td>REGEXREPLACE</td><td>[^0-9] を &#8220;&#8221; に</td></tr><tr><td>電話番号の中央をマスク</td><td>REGEXREPLACE</td><td>-\d{4}- を -****- に</td></tr><tr><td>数字を含む行だけ判定</td><td>REGEXTEST</td><td>[0-9]</td></tr><tr><td>メール形式かざっくり判定</td><td>REGEXTEST</td><td>@</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">個人的にいいなと思うのは、表記ゆれのチェックや不要文字の除去みたいな、地味だけど件数が多いと面倒な作業がフィルや数式コピーでまとめて片付くところです、今までVBAでループ書いてた処理が、関数1行で済むケースがけっこうあります</p>



<p class="wp-block-paragraph">REGEXTESTはTRUE / FALSEを返すので、IF関数やフィルター、条件付き書式と組み合わせると「このパターンに合う行だけ色を付ける」みたいなこともできて、チェック作業がはかどります</p>



<h2 class="wp-block-heading">関連：XLOOKUP・XMATCHも正規表現に対応した</h2>



<p class="wp-block-paragraph">ちょっとした関連ネタとして、2024年12月には<strong>XLOOKUP</strong>と<strong>XMATCH</strong>でも正規表現が使えるようになりました</p>



<p class="wp-block-paragraph">具体的には、これらの関数の照合モードを表す<strong>match_mode</strong>引数に<strong>3</strong>を指定すると、検索値を正規表現として扱ってくれます、「完全一致じゃなくて、パターンに合う行を引っ張ってきたい」みたいな検索ができるようになるってことです</p>



<div class="wp-block-group is-style-big_icon_memo"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph">XLOOKUP・XMATCHの正規表現モードは、執筆時点ではプレビュー機能として提供されているものです、こちらもMicrosoft 365向けで、フレーバーはREGEX関数と同じPCRE2です、大事なブックでの常用は仕様が固まってからのほうが安心です</p>
</div></div>



<p class="wp-block-paragraph">正規表現を覚えておくと、こうやって対応する関数が増えたときにそのまま流用できるので、文字列処理の引き出しとして持っておいて損はないなと感じてます</p>



<h2 class="wp-block-heading">REGEX関数を使うときの注意点</h2>



<p class="wp-block-paragraph">便利な反面、使う前に押さえておきたいポイントもいくつかあります</p>



<ul class="wp-block-list is-style-check_list -list-under-dashed">
<li>使えるのはMicrosoft 365のみ、買い切りのExcel 2021 / 2024では使えない（共有相手の環境にも注意）</li>



<li>戻り値はテキスト、数値として扱うならVALUE関数で変換する</li>



<li>フレーバーはPCRE2、VBAのVBScript RegExpとは細部の書き方が違う場合がある</li>



<li>大量データに複雑なパターンを当てると、再計算が重くなることがある</li>
</ul>



<p class="wp-block-paragraph">共有のところは特に見落としがちで、自分のPCでは動くのに、買い切り版のExcelを使ってる同僚が開いたら<strong><span class="swl-marker mark_yellow">#NAME?エラー</span></strong>になる、というのが起こり得ます、配布するファイルで使うときは相手の環境も確認しておくと安心です</p>



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



<p class="wp-block-paragraph">ExcelのREGEX関数3つを振り返っておきます</p>



<ul class="wp-block-list is-style-num_circle">
<li><strong>REGEXTEST</strong>…パターンに一致するかをTRUE / FALSEで判定</li>



<li><strong>REGEXEXTRACT</strong>…一致した部分を抜き出す（return_modeで最初の1件 / 全件 / グループを切替）</li>



<li><strong>REGEXREPLACE</strong>…一致した部分を置き換える（$1 $2でグループ参照、occurrenceで対象を絞る）</li>
</ul>



<p class="wp-block-paragraph">Microsoft 365限定という条件はありますが、使える環境なら文字列処理がだいぶ楽になります、まずはREGEXTESTで判定から触ってみて、慣れてきたら抽出・置換に広げていくと取っつきやすいです</p>



<p class="wp-block-paragraph">肝心の正規表現のパターンの作り方があやしいときは、メタ文字や定義済みパターンの基礎をまとめた <a href="https://javeo.jp/regexp-beginner/" target="_blank" rel="noopener noreferrer">正規表現とは？拒否反応が出る人向けに基本とよく使うパターンを整理</a> を読んでみてください、そっちにはVBAで正規表現を使う実装例も載せてあるので、関数では物足りなくなってVBAに踏み込みたくなったときにも役立つと思います</p>
]]></content:encoded>
					
					<wfw:commentRss>https://javeo.jp/excel-regex/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>正規表現とは？拒否反応が出る人向けに基本とよく使うパターンを整理</title>
		<link>https://javeo.jp/regexp-beginner/</link>
					<comments>https://javeo.jp/regexp-beginner/#respond</comments>
		
		<dc:creator><![CDATA[ジャベ雄]]></dc:creator>
		<pubDate>Tue, 16 Aug 2022 23:00:00 +0000</pubDate>
				<category><![CDATA[Excel・VBA]]></category>
		<category><![CDATA[正規表現]]></category>
		<guid isPermaLink="false">https://javeo.jp/?p=823</guid>

					<description><![CDATA[<p><img src="https://javeo.jp/wp-content/uploads/2026/06/regexp-beginner-1024x538.jpg" class="webfeedsFeaturedVisual" /></p>正規表現は基本のルールこそ共通ですが、動かす環境ごとに細かい書き方や使える機能が少し違います このページのサンプルはVBA(VBScriptのRegExp)で動かした結果なので、Excelの新しいREGEX関数や、多くの [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://javeo.jp/wp-content/uploads/2026/06/regexp-beginner-1024x538.jpg" class="webfeedsFeaturedVisual" /></p><div class="codoc-evacuations" style="display:none;" data-shortcode=""></div>
<div class="wp-block-group is-style-big_icon_memo"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph">正規表現は基本のルールこそ共通ですが、動かす環境ごとに細かい書き方や使える機能が少し違います</p>



<p class="wp-block-paragraph">このページのサンプルはVBA(VBScriptのRegExp)で動かした結果なので、Excelの新しいREGEX関数や、多くのツールが採用しているPCRE2、Pythonのreなどでは細部が変わることがあります</p>
</div></div>



<p class="wp-block-paragraph">いきなりですが、正規表現って暗号にしか見えず拒否反応が出るのって私だけですか？</p>



<p class="wp-block-paragraph">VBAで部分一致してるかとかならLike演算子使えばいいし、文字を抜き出すならLeft、Right、MidにInstr、InstrRevとかを組み合わせれば大抵のパターンは対応できるので目を背け続けてきましたが、先日どうしても正規表現を使わざるを得ないことになって最低限使える程度には覚えたので書き出します</p>



<p class="wp-block-paragraph">この記事は正規表現の基本(<strong>メタ文字</strong>と<strong>定義済みのパターン</strong>、それと<strong>よく使うパターン</strong>)を整理した上で、ひとつの実装例としてVBAでの使い方まで載せてます</p>



<h2 class="wp-block-heading">そもそも正規表現とは</h2>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">正規表現は、文字列の集合を一つの文字列で表現する方法の一つである。</p>



<p class="wp-block-paragraph">もともと正規表現は形式言語理論において正規言語を表すための手段として導入された。</p>



<p class="wp-block-paragraph">その後正規表現は単機能の文字列探索ツールやテキストエディタ、ワードプロセッサなどのアプリケーションで、マッチさせるべき対象を表すために使用されるようになり、表せるパターンの種類を増やすために本来の正規表現にはないさまざまな記法が新たに付け加えられた。このような拡張された正規表現には正規言語ではない文字列も表せるものも多く、ゆえに正規表現という名前は実態に即していない面もあるが、伝統的に正規表現と呼ばれ続けている。</p>
<cite>https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE</cite></blockquote>



<p class="wp-block-paragraph">平たく言えばパターンマッチングってやつですね</p>



<p class="wp-block-paragraph">このパターンの作り方が英字数字だけではなく記号も入り乱れているから暗号のような印象を受けるわけで、一見しても意味が分からないから拒絶反応が出るわけです</p>



<h3 class="wp-block-heading">正規表現が使える主な場所</h3>



<p class="wp-block-paragraph">正規表現はVBAだけの話ではなくて、テキストエディタやIDEの検索・置換、プログラミング言語、いろんなツールの設定など、文字列を相手にする場面で広く使われてます</p>



<ul class="wp-block-list is-style-check_list -list-under-dashed">
<li>テキストエディタやIDEの検索・置換(VS Code、サクラエディタなど)</li>



<li>VBA(本記事の例、VBScriptのRegExpを使う)</li>



<li>Python(reモジュール)やJavaScriptなどのプログラミング言語</li>



<li>Excel(2024年から正規表現の関数が使えるようになりました)</li>
</ul>



<p class="wp-block-paragraph">Excelについては<strong>2024年から正規表現の関数(REGEXTEST・REGEXEXTRACT・REGEXREPLACE)</strong>が使えるようになったので、VBAを書かなくても関数だけで正規表現が扱える場面が増えました、この話は<a href="https://javeo.jp/excel-regex/" target="_blank" rel="noopener noreferrer">Excelで正規表現！REGEX関数3つの使い方</a>で詳しくまとめたので、Excelを使う人はそちらもどうぞ</p>



<p class="wp-block-paragraph">場所が違っても<strong><span class="swl-marker mark_yellow">基本のルールはだいたい共通</span></strong>なので、まずは下の基本を押さえておけば応用が利きます</p>



<h2 class="wp-block-heading">基本的な正規表現</h2>



<p class="wp-block-paragraph">まず基本的な正規表現の文字(<strong><span class="swl-marker mark_yellow">メタ文字</span></strong>)から</p>


<div class="c-scrollHint sp_"><span>スクロールできます <i class="icon-more_arrow"></i></span></div>
<figure data-table-scrollable="sp" class="wp-block-table is-style-stripes"><table style="--table-width:700px;"><thead><tr><th>文字</th><th>説明</th></tr></thead><tbody><tr><td>.</td><td>任意の1文字（改行除く）</td></tr><tr><td>*</td><td>直前のパターンの0回以上の繰り返し※最長一致</td></tr><tr><td>+</td><td>直前のパターンの1回以上の繰り返し※最長一致</td></tr><tr><td>?</td><td>直前のパターンが0回または1回現れる※最長一致</td></tr><tr><td>*?</td><td>直前のパターンの0回以上の繰り返し※最短一致</td></tr><tr><td>+?</td><td>直前のパターンの1回以上の繰り返し※最短一致</td></tr><tr><td>??</td><td>直前のパターンが0回または1回現れる※最短一致</td></tr><tr><td>()</td><td>()内をグループ化する</td></tr><tr><td>|</td><td>いずれかの条件（つまりor）</td></tr><tr><td>[]</td><td>[]内のいずれかの文字にマッチする</td></tr><tr><td>[^]</td><td>[]内のいずれかの文字にマッチしない</td></tr><tr><td>{n}</td><td>直前のパターンのn回繰り返し</td></tr><tr><td>{n,m}</td><td>直前のパターンのn回以上、m以下の繰り返し ※nかmの一方を省略可</td></tr><tr><td>\</td><td>直後のパターンが正規表現ではなくただの文字として扱うようにする（いわゆるエスケープ）</td></tr><tr><td>^</td><td>先頭</td></tr><tr><td>$</td><td>末尾</td></tr></tbody></table></figure>



<h3 class="wp-block-heading">補足</h3>



<p class="wp-block-paragraph">サンプルに対して実際に正規表現のマッチ結果を補足的に書いてみる</p>



<div class="swell-block-capbox cap_box"><div class="cap_box_ttl"><span>サンプル</span></div><div class="cap_box_content">
<p class="wp-block-paragraph">abcde0edcba1AAAAA2BBB3あいうえお4\5カキクケコ</p>
</div></div>



<p class="wp-block-paragraph"><strong><span class="swl-marker mark_yellow">&#8220;最長一致&#8221;</span></strong>と<strong><span class="swl-marker mark_yellow">&#8220;最短一致&#8221;</span></strong>の違いは最後にマッチする文字か最初にマッチする文字かの違い</p>



<figure class="wp-block-table is-style-stripes"><table><thead><tr><th>正規表現</th><th>説明</th><th>マッチ結果</th></tr></thead><tbody><tr><td>.*c</td><td>最長一致</td><td>abcde0edc</td></tr><tr><td>.*?c</td><td>最短一致</td><td>abc</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><strong><span class="swl-marker mark_yellow">&#8220;(|)&#8221;</span></strong>と<strong><span class="swl-marker mark_yellow">&#8220;[]&#8221;</span></strong>の違いは単語ベースで検索するか1文字単位で検索するか</p>



<figure class="wp-block-table is-style-stripes"><table><thead><tr><th>正規表現</th><th>説明</th><th>マッチ結果</th></tr></thead><tbody><tr><td>(bcd|dcb)</td><td>単語で検索できる</td><td>bcd,dcb</td></tr><tr><td>[bcd]</td><td>1文字単位で検索</td><td>b,c,d</td></tr><tr><td>(b|c|d)</td><td>全て1文字なので[bcd]と同じ</td><td>b,c,d</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><strong><span class="swl-marker mark_yellow">&#8220;[]&#8221;</span></strong>内は&#8221;-&#8220;で繋ぐことで範囲検索できる</p>



<figure class="wp-block-table is-style-stripes"><table><thead><tr><th>正規表現</th><th>説明</th><th>マッチ結果</th></tr></thead><tbody><tr><td>[a-z]</td><td>「a～z」の小文字英字</td><td>a,b,c,d,e</td></tr><tr><td>[B-F]</td><td>「B～F」の大文字英字</td><td>B</td></tr><tr><td>[0-9]</td><td>「0～9」の数字</td><td>0,1,2,3,4,5</td></tr><tr><td>[あ-ん]</td><td>「あ～ん」のひらがな</td><td>あ,い,う,え,お</td></tr><tr><td>[^a-zB-F0-9あ-ん]</td><td>上記以外</td><td>A,\,カ,キ,ク,ケ,コ</td></tr><tr><td>A{3}</td><td>Aの3回繰り返し</td><td>AAA</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">エスケープすると例えば<strong><span class="swl-marker mark_yellow">&#8220;.&#8221;</span></strong>はドット扱いになるのでメアドとのマッチとかで使える</p>



<figure class="wp-block-table is-style-stripes"><table><thead><tr><th>正規表現</th><th>説明</th><th>マッチ結果</th></tr></thead><tbody><tr><td>\.*c</td><td>.がドット扱いになっている</td><td>c</td></tr><tr><td>\\</td><td>\をエスケープする時は並べる</td><td>\</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">先頭と末尾を指定する機会はなくもないけど少ない気もする・・・</p>



<figure class="wp-block-table is-style-stripes"><table><thead><tr><th>正規表現</th><th>説明</th><th>マッチ結果</th></tr></thead><tbody><tr><td>^bcd</td><td>「bcd」はあるが先頭ではない</td><td>（なし）</td></tr><tr><td>bcd$</td><td>「bcd」はあるが末尾ではない</td><td>（なし）</td></tr></tbody></table></figure>



<h2 class="wp-block-heading">定義済みの正規表現</h2>



<p class="wp-block-paragraph">まず最初に「定義済み」って表現であってますか？(にわかです)</p>



<p class="wp-block-paragraph">この定義済みの正規表現が便利そうな反面、難解になる原因な気がする</p>



<p class="wp-block-paragraph">同等の正規表現があるものは無理して使う必要もないけど解読する時は知っておく必要があるのでよく使われるものだけ</p>



<p class="wp-block-paragraph">他にもありますが私は頭の整理がつかなくなるこれだけにしてます</p>



<figure class="wp-block-table is-style-stripes"><table><thead><tr><th>文字</th><th>説明</th><th>同等の正規表現</th></tr></thead><tbody><tr><td>\d</td><td>数字</td><td>[0-9]</td></tr><tr><td>\D</td><td>数字以外</td><td>[^0-9]</td></tr><tr><td>\w</td><td>英字、アンダーバー、数字</td><td>[a-zA-Z_0-9]</td></tr><tr><td>\W</td><td>英字、アンダーバー、数字以外</td><td>[^a-zA-Z_0-9]</td></tr><tr><td>\s</td><td>空白</td><td>[ \t\f\r\n]</td></tr><tr><td>\S</td><td>空白以外</td><td>[^ \t\f\r\n]</td></tr><tr><td>\t</td><td>タブ</td><td>（なし）</td></tr><tr><td>\r</td><td>改行※キャリッジリターン</td><td>（なし）</td></tr><tr><td>\n</td><td>改行※ラインフィード</td><td>（なし）</td></tr></tbody></table></figure>



<h2 class="wp-block-heading">VBAでの正規表現</h2>



<p class="wp-block-paragraph">ここからは基本を踏まえて、ひとつの環境での実装例としてVBAで実際に使う形を書いてみます</p>



<p class="wp-block-paragraph">VBAでは<strong>VBScriptのRegExpオブジェクト</strong>を借りて正規表現を扱う形になるので、他の言語と少し手順が違うところがあります</p>



<h3 class="wp-block-heading">まずは参照設定</h3>



<p class="wp-block-paragraph">「Microsoft VBScript Regular Expressions 5.5」にチェックを入れて利用できる状態へ</p>



<figure class="wp-block-image size-full"><a href="https://javeo.jp/wp-content/uploads/2022/08/2022-08-16_14h45_08.png" target="_blank" rel="noopener noreferrer"><img decoding="async" width="455" height="317" src="https://javeo.jp/wp-content/uploads/2022/08/2022-08-16_14h45_08.png" alt="" class="wp-image-843" srcset="https://javeo.jp/wp-content/uploads/2022/08/2022-08-16_14h45_08.png 455w, https://javeo.jp/wp-content/uploads/2022/08/2022-08-16_14h45_08-300x209.png 300w, https://javeo.jp/wp-content/uploads/2022/08/2022-08-16_14h45_08-150x105.png 150w" sizes="(max-width: 455px) 100vw, 455px" /></a></figure>



<p class="wp-block-paragraph">参照設定ではなくてCreateObjectを使うときは&#8221;VBScript.RegExp&#8221;</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Dim objReg As Object
Set objReg = CreateObject(&quot;VBScript.RegExp&quot;)</code></pre></div>



<h3 class="wp-block-heading">RegExpオブジェクトのプロパティとメソッド</h3>



<figure class="wp-block-table is-style-stripes"><table><thead><tr><th>プロパティ</th><th>説明</th></tr></thead><tbody><tr><td>Pattern</td><td>正規表現のパターン</td></tr><tr><td>IgnoreCase</td><td>大文字と小文字の区別しない時はTrue（指定しない場合はFalseが適用）</td></tr><tr><td>Global</td><td>複数回マッチした場合2回目以降も取得するならTrue（指定しない場合はFalseが適用）</td></tr></tbody></table></figure>



<figure class="wp-block-table is-style-stripes"><table><thead><tr><th>メソッド</th><th>説明</th></tr></thead><tbody><tr><td>Test</td><td>マッチング結果をTrue、Falseで返す</td></tr><tr><td>Replace</td><td>マッチング成功した部分を置換する</td></tr><tr><td>Execute</td><td>マッチング結果をMatchCollectionオブジェクトで返す ※基本これを使う</td></tr></tbody></table></figure>



<h3 class="wp-block-heading">MatchCollectionのプロパティとメソッド</h3>



<figure class="wp-block-table is-style-stripes"><table><thead><tr><th>プロパティ</th><th>説明</th></tr></thead><tbody><tr><td>Count</td><td>マッチした件数を返す ※GlobalがFalseだと1が最大</td></tr></tbody></table></figure>



<figure class="wp-block-table is-style-stripes"><table><thead><tr><th>プロパティ</th><th>説明</th></tr></thead><tbody><tr><td>Item</td><td>指定したIndexのMatchオブジェクトを返す ※Match(Index)と同等</td></tr></tbody></table></figure>



<h3 class="wp-block-heading">Matchのプロパティ</h3>



<figure class="wp-block-table is-style-stripes"><table><thead><tr><th>プロパティ</th><th>説明</th></tr></thead><tbody><tr><td>FirstIndex</td><td>最初にマッチングした位置を返す ※文字列の先頭は0から</td></tr><tr><td>Length</td><td>マッチした文字列の長さを返す</td></tr><tr><td>Value</td><td>マッチした文字列を返す</td></tr></tbody></table></figure>



<h3 class="wp-block-heading">サンプルプログラム</h3>



<p class="wp-block-paragraph">私が正規表現を使うときは基本的にこの関数を準備して実行してます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Public Function RegExpFunc(Target As String, strPattern As String, Optional Idx As Long = 0, Optional strDelimiter As String = &quot;&quot;) As String
&#39;Dim objReg As New VBScript_RegExp_55.RegExp             &#39;---参照設定してればこれでもok
&#39;Dim objMatchColl As VBScript_RegExp_55.MatchCollection  &#39;---参照設定してればこれでもok
&#39;Dim objMatch As VBScript_RegExp_55.Match                &#39;---参照設定してればこれでもok
Dim objReg As Object
Dim objMatchColl As Object
Dim objMatch As Object


Set objReg = CreateObject(&quot;VBScript.RegExp&quot;)
With objReg
    .Pattern = strPattern   &#39;---正規表現のパターン
    .IgnoreCase = False     &#39;---大文字小文字の区別をする
    .Global = True          &#39;---複数回マッチした場合は全て取得する
    Set objMatchColl = .Execute(Target)
End With

&#39;---Idxで指定したIndexのデータを取得する
RegExpFunc = vbNullString
If objMatchColl.Count &gt; Idx Then
    If Idx = -1 Then &#39;---idxを-1でしていた時はobjMatchCollの結合モードにする
        For Each objMatch In objMatchColl
            RegExpFunc = RegExpFunc & strDelimiter & objMatch
        Next
        RegExpFunc = Replace(RegExpFunc, strDelimiter, &quot;&quot;, 1, 1) &#39;---先頭に余計なデリミタがあるから一度だけReplaceで削除する
    Else
        RegExpFunc = objMatchColl(Idx)
    End If
End If

Set objMatch = Nothing
Set objReg = Nothing
End Function</code></pre></div>



<p class="wp-block-paragraph">VBAでJSONを扱うときの文字列処理にも正規表現が役立つので、あわせて<a href="https://javeo.jp/vba-json/" target="_blank" rel="noopener noreferrer">VBAでJSONを扱う記事</a>も置いておきます</p>



<h2 class="wp-block-heading">Excelでのテスト実行結果</h2>



<figure class="wp-block-image size-large"><a href="https://javeo.jp/wp-content/uploads/2022/08/2022-08-17_08h43_18.png" target="_blank" rel="noopener noreferrer"><img decoding="async" width="1024" height="495" src="https://javeo.jp/wp-content/uploads/2022/08/2022-08-17_08h43_18-1024x495.png" alt="" class="wp-image-865" srcset="https://javeo.jp/wp-content/uploads/2022/08/2022-08-17_08h43_18-1024x495.png 1024w, https://javeo.jp/wp-content/uploads/2022/08/2022-08-17_08h43_18-300x145.png 300w, https://javeo.jp/wp-content/uploads/2022/08/2022-08-17_08h43_18-150x72.png 150w, https://javeo.jp/wp-content/uploads/2022/08/2022-08-17_08h43_18-768x371.png 768w, https://javeo.jp/wp-content/uploads/2022/08/2022-08-17_08h43_18.png 1178w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p class="wp-block-paragraph">RegExpFuncを自作関数にして引数をヘッダー部の通りにした結果なのであくまで参考に</p>



<p class="wp-block-paragraph">実際のファイルは下記の&#8221;ダウンロード&#8221;ボタンを押下</p>



<div class="wp-block-file aligncenter"><a id="wp-block-file--media-0e714f13-3dd8-42f6-897f-72ac30d284db" href="https://javeo.jp/wp-content/uploads/2022/08/正規表現サンプルマクロ.xlsm">正規表現サンプルマクロ.xlsm</a><a href="https://javeo.jp/wp-content/uploads/2022/08/正規表現サンプルマクロ.xlsm" class="wp-block-file__button wp-element-button" download aria-describedby="wp-block-file--media-0e714f13-3dd8-42f6-897f-72ac30d284db">ダウンロード</a></div>



<h2 class="wp-block-heading">よくある正規表現</h2>



<p class="wp-block-paragraph">最後に、実際の業務でよく使う<strong><span class="swl-marker mark_yellow">郵便番号や電話番号などのパターン</span></strong>をまとめておきます、ここはVBAに限らずどの環境でも使い回しやすいです</p>


<div class="c-scrollHint"><span>スクロールできます <i class="icon-more_arrow"></i></span></div>
<figure data-table-scrollable="both" class="wp-block-table is-style-stripes"><table style="--table-width:800px;"><thead><tr><th>名称</th><th>正規表現</th><th>サンプル</th></tr></thead><tbody><tr><td>郵便番号</td><td>\d{3}-\d{4}</td><td>100-8111</td></tr><tr><td>携帯電話番号</td><td>0[789]0-\d{4}-\d{4}</td><td>070-0123-4567</td></tr><tr><td>固定電話</td><td>0(\d-\d{4}|\d{2}-\d{3}|\d{3}-\d{2}|\d{4}-\d)-\d{4}</td><td>03-3213-1111</td></tr><tr><td>日付</td><td>\d{1,4}(/|-|年)([0-1]\d|\d)(/|-|月)([0-3]\d|\d)日?</td><td>2022年08月17日</td></tr><tr><td>ドメイン</td><td>([a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]*\.)+[a-zA-Z]{2,}</td><td>sub.example.co.jp</td></tr></tbody></table></figure>



<h2 class="wp-block-heading">あとがき</h2>



<p class="wp-block-paragraph">なんとなくは理解したものの、まだまだ奥は深いしここに書いていないメタ文字もあるので本職の人が書いてる正規表現は相変わらず意味が分からんです</p>



<p class="wp-block-paragraph">regex101みたいに、入力したパターンがどこにマッチするかその場で試せる正規表現チェッカーサイトも多々あるので、必要ならそういうのを使いながらちゃんと調べて覚えようかな</p>
]]></content:encoded>
					
					<wfw:commentRss>https://javeo.jp/regexp-beginner/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
