Excelの正規表現関数(REGEXTEST・REGEXREPLACE・REGEXEXTRACT)の使い方
Microsoft 365のExcelで利用できる 3つの正規表現関数(REGEXTEST / REGEXEXTRACT / REGEXREPLACE)。
ページ内目次
2. 各関数の基本構文と引数
3. 正規表現構文の3つの実践テクニック
4. 実務でそのまま使える!正規表現&数式レシピ集(コピペOK)
5. 実務でハマりやすい注意点
6. 正規表現リファレンス(特殊文字・シンボル一覧)
1. 正規表現エンジン(PCRE2)と基本仕様
そのため、PCRE2で利用できる構文や特殊シーケンスを前提としてパターンを記述します。
まずは、3つの関数の役割・戻り値・主な実務用途を整理しておきましょう。
| 関数名 | 役割 | 戻り値の型 | 主な実務用途 |
| REGEXTEST | パターンに一致するか判定 | 論理値(TRUE / FALSE) | データ検証、IFやFILTERの条件分岐 |
| REGEXEXTRACT | パターンに一致する文字列を抽出 | テキスト(設定により単一/配列スピル) | 数字・メール・特定コードの切り出し |
| REGEXREPLACE | パターンに一致する部分を置換・削除 | テキスト | 不要記号や改行の削除、表記統一、順序入れ替え |
2. 各関数の基本構文と引数
REGEXTEST 関数(パターン一致判定)
| 引数 | 説明 |
| text | 一致するテキストを含むセルへのテキストまたは参照。 |
| pattern | 一致させるテキストのパターンを記述する正規表現 ("regex")。 |
| case_sensitivity | 一致で大文字と小文字が区別されるかどうかを判断します。 既定では大文字と小文字が区別されます。 0: 大文字と小文字の区別 1: 大文字と小文字を区別しない |
REGEXTEXT 関数の基本例
=REGEXTEST(A1, "^\d+$")
A1セルが「12345」や「12345」の場合は TRUE、「123A5」のように英文字や記号が混ざっている場合は FALSE を返します。
=REGEXTEST(A1, "^[0-9]+$")
REGEXREPLACE 関数(文字列置換・削除)
| 引数 | 説明 |
| text | 文字列または文字列を置き換えるテキストを含むセルへの参照。 |
| pattern | 置き換えるテキストのパターンを記述する正規表現 ("regex")。 |
| replacement | パターンのインスタンスを置き換えるテキスト。 |
| occurrence | 置き換えるパターンのインスタンスを指定します。 既定では、occurrence は 0 で、すべてのインスタンスが置き換えられます。 負の数値は、末尾から検索して、そのインスタンスを置き換えます。 |
| case_sensitivity | 一致で大文字と小文字が区別されるかどうかを判断します。 既定では大文字と小文字が区別されます。 0: 大文字と小文字の区別 1: 大文字と小文字を区別しない |
REGEXREPLACE 関数の基本例
=REGEXREPLACE(A1, "\d", "*")
第4引数(occurrence)を省略しているため既定値の 0 となり、テキスト内に存在するすべての数字が一括で置換されます。
例えばA1セルが「ID-0012」の場合、結果は「ID-****」となります。
REGEXEXTRACT 関数(文字列抽出)
| 引数 | 説明 |
| text | 文字列または文字列を抽出するテキストを含むセルへの参照。 |
| pattern | 抽出するテキストのパターンを記述する正規表現 ("regex")。 |
| return_mode | 抽出する文字列を指定する数値。 既定では、戻りモードは 0 です。 0: パターンに一致する最初の文字列を返します 1: パターンに一致するすべての文字列を配列として返します 2: 最初の一致からキャプチャ グループを配列として返す |
| case_sensitivity | 一致で大文字と小文字が区別されるかどうかを判断します。 既定では大文字と小文字が区別されます。 0: 大文字と小文字の区別 1: 大文字と小文字を区別しない |
REGEXEXTRACT 関数の基本例
=REGEXEXTRACT(A1, "\d+")
第3引数(return_mode)を省略しているため既定値の 0(最初に一致した部分のみ)が適用されます。
例えばA1セルが「商品A(150個入り)2026年」の場合、最初にマッチした「150」を抽出します。
3. 正規表現構文の3つの実践テクニック
テクニック1:最短一致(非貪欲マッチ ?)による境界切り出し
目的の境界で区切るには ? を付けて「最短一致(非貪欲)」に指定します。
- 課題: カッコ内の文字列 "[重要]2026年度[確定]" から最初のカッコ内だけを取り出したい
- 悪例(強欲): REGEXEXTRACT(A1, "[.*]") → "[重要]2026年度[確定]"(末尾のカッコまで巻き込んでしまう)
- 正解(最短一致): REGEXEXTRACT(A1, "[.*?]") → "[重要]"
テクニック2:REGEXEXTRACT(モード2)によるキャプチャグループの分離スピル
"2026-09-08" から 年・月・日 を別々のセルへ分割抽出する
=REGEXEXTRACT(A1, "(\d{4})-(\d{2})-(\d{2})", 2)テクニック3:キャプチャグループと置換文字列($1, $2)による順序入れ替え
これを利用して要素の入れ替えや挟み込みが可能です。
"山田 太郎" や "山田 太郎"(姓 名)を "太郎 山田"(名 姓)に入れ替える
=REGEXREPLACE(A1, "^([^\s]+)\s+([^\s]+)$", "$2 $1")
- Excelの \s は全角スペース・半角スペースの双方が対象となるため、区切りが全角・半角いずれの場合でも正しく動作します。
- ※本数式は「スペース区切りの2要素」を前提としています。ミドルネームを含む3要素以上の氏名データを処理する場合はパターンの調整が必要です。
テクニック4:先読み・後読み(Lookaround)による境界指定とピンポイント抽出
検索条件とした文字列自体を抽出結果や置換対象に含めず、目的のテキストだけをピンポイントで取り出す際に非常に有効です。
- 肯定的な後読み (?<=...):指定パターンの「直後」に位置する文字列
- 肯定的な先読み (?=...):指定パターンの「直前」に位置する文字列
「売上: 15,000円」のようなテキストから、前後のラベル(「売上: 」や「円」)を含めずに数値の「15,000」のみを直接抽出したい
=REGEXEXTRACT(A1, "(?<=売上: )[0-9,]+(?=円)")
これらは文字列そのものをマッチさせるのではなく、マッチする位置だけを指定するため、実際にマッチするのは数値部分の [0-9,]+ のみです。
そのため、「売上: 」や「円」を抽出結果に含めず、目的の数値だけを直接抽出できます。
4. 実務でそのまま使える!正規表現&数式レシピ集(コピペOK)
| No. | 処理目的 | 対象データ | REGEX数式 | 実行結果 | 簡単解説 |
| 1 | 数値・金額のみ抽出(計算可能化) | 数量: 1,500個 | =VALUE(REGEXEXTRACT(C2,"-?(?:\d{1,3}(?:,\d{3})+|\d+)(?:\.\d+)?")) | 1500 | 負符号・カンマ・小数を含む数値を取り出し、VALUE関数で数値型に変換 |
| 2 | 都道府県名の切り出し | 東京都千代田区1-1 | =REGEXEXTRACT(C3,"^(?:北海道|東京都|京都府|大阪府|(?:青森|岩手|宮城|秋田|山形|福島|茨城|栃木|群馬|埼玉|千葉|神奈川|新潟|富山|石川|福井|山梨|長野|岐阜|静岡|愛知|三重|滋賀|兵庫|奈良|和歌山|鳥取|島根|岡山|広島|山口|徳島|香川|愛媛|高知|福岡|佐賀|長崎|熊本|大分|宮崎|鹿児島|沖縄)県)") | 東京都 | 都道府県名を明示的に列挙し、文字列の先頭から抽出 |
| 3 | 市区町村名の切り出し | 東京都千代田区大手町 | =REGEXEXTRACT(C4,"^(?:北海道|東京都|京都府|大阪府|(?:青森|岩手|宮城|秋田|山形|福島|茨城|栃木|群馬|埼玉|千葉|神奈川|新潟|富山|石川|福井|山梨|長野|岐阜|静岡|愛知|三重|滋賀|兵庫|奈良|和歌山|鳥取|島根|岡山|広島|山口|徳島|香川|愛媛|高知|福岡|佐賀|長崎|熊本|大分|宮崎|鹿児島|沖縄)県)(.+?[市区町村])",2) | 千代田区 | 都道府県名の後の市区町村名を抽出。 ※「武蔵村山市」など名前に「市区町村」の文字を含む自治体は、最短一致により途中で切れる点に注意 |
| 4 | メールアドレスの抽出 | 連絡先: info@example.com | =REGEXEXTRACT(C5,"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}") | info@example.com | 一般的なメールアドレス形式の文字列を抽出 |
| 5 | 電話番号の抽出 | TEL: 090-1234-5678 (直通) | =REGEXEXTRACT(C6,"0(?:[56789]0-\d{4}-\d{4}|120-\d{3}-\d{3}|800-\d{3}-\d{4}|\d{1,4}-\d{1,4}-\d{4}|\d{9,10})") | 090-1234-5678 | 日本の電話番号として想定される形式にマッチ |
| 6 | カッコ内の文字のみ抽出 | 商品A[数量限定品]2026年 | =REGEXEXTRACT(C7,"(?<=[[((]).+?(?=[]))])") | 数量限定品 | 前後のカッコを含めず、その内部の文字列だけを抽出 |
| 7 | 文字列から数値をすべて抽出(改行結合) | 商品A 120個、商品B 350個、商品C 80個 | =TEXTJOIN(CHAR(10),,REGEXEXTRACT(C8,"\d+",1)) | 120 350 80 |
return_mode=1で文字列中のすべてのマッチを抽出し、TEXTJOINでセル内改行 |
| 8 | 連続する英字コードの抽出 | 管理コード: ABC-123 | =REGEXEXTRACT(C9,"[a-zA-Z]+") | ABC | 連続した半角アルファベットを抽出 |
| 9 | URL(Webアドレス)抽出 | 詳細は https://example.com/ を確認 | =REGEXEXTRACT(C10, "https?://[^\s]+") | https://example.com/ | http://またはhttps://から始まり、空白類の手前までを抽出 |
| 10 | ドメイン名のみの抽出 | https://www.example.co.jp/index | =REGEXEXTRACT(C11, "https?://([^/\s]+)", 2) | www.example.co.jp | URLのプロトコルの後ろから、最初のスラッシュまたは空白までをキャプチャ |
| 11 | 空白・改行コードの全削除 | 山田 太郎 |
=REGEXREPLACE(C12, "\s", "") | 山田太郎 | 半角空白・全角空白・改行・タブなどの空白類を削除 |
| 12 | 連続空白を半角1文字に集約 | 東京都 千代田区 大手町 | =REGEXREPLACE(C13, "\s+", " ") | 東京都 千代田区 大手町 | 連続する空白類を半角スペース1文字に置換 |
| 13 | 氏名の「姓 名」を反転 | 山田 太郎 | =REGEXREPLACE(C14, "^([^\s]+)\s+([^\s]+)$", "$2 $1") | 太郎 山田 | 2つの要素をキャプチャし、$2 $1で順序を入れ替え |
| 14 | 数字以外の不要文字を全削除 | TEL: 03(1234)5678 | =REGEXREPLACE(C15,"[^0-9]","") | 0312345678 | 半角数字以外の文字・記号をすべて削除 |
| 15 | 電話番号へハイフン自動挿入 | 09012345678 | =REGEXREPLACE(C16,"^(\d{3})(\d{4})(\d{4})$","$1-$2-$3") | 090-1234-5678 | 11桁の数字を3桁・4桁・4桁に分割してハイフンを挿入 |
| 16 | HTML/XMLタグの除去 | <b>重要:</b> 更新情報 | =REGEXREPLACE(C17,"<[^>]+>","") | 重要: 更新情報 | <から>までのタグ部分を削除 |
| 17 | 郵便番号フォーマットチェック | 100-0001 | =IF(REGEXTEST(C18,"^\d{3}-\d{4}$"),"OK","要修正") | OK | 文字列全体が3桁-4桁の形式になっているか検証 |
| 18 | 半角英数字のみか判定 | User123 | =REGEXTEST(C19,"^[a-zA-Z0-9]+$") | TRUE | 半角英字または数字だけで構成されているか判定 |
| 19 | ASCII文字以外が含まれるか判定 | Excel関数 | =REGEXTEST(C20,"[^\x01-\x7E]") | TRUE | ASCIIの印字可能文字以外の文字が含まれるか判定 |
| 20 | 複数キーワードの含有判定 | 至急対応が必要です | =REGEXTEST(C21,"緊急|至急|重要") | TRUE | |によるOR条件で、いずれかのキーワードを含むか判定 |
5. 実務でハマりやすい注意点
- \s は全角スペース(U+3000)を含む空白文字全般にマッチする(Excel特有の仕様)
一般的なプログラミング言語や正規表現エンジン(PCRE2の標準設定を含む)では、\s はASCIIの半角空白類(半角スペース・タブ・改行等)に限定され、全角スペースにはマッチしないのが基本挙動です。
しかし、ExcelのREGEX関数における \s は、この標準的な挙動とは異なり、全角スペース(U+3000)を含むUnicode空白文字全般に標準対応しています。
これはExcelの実装における独自の便利な拡張仕様であり、他言語・他エンジンでの正規表現経験がある方ほど「\sは半角のみ」という思い込みで意図しない結果(全角スペースが消えない/マッチしない)を招きやすいため、注意が必要です。
なお、この挙動により、一般的な全角・半角混在の空白除去や区切り処理においては、全角スペース用の特殊な指定([\s ]など)を追加する必要はありません。- 補足:全角スペースのみをピンポイントで指定したい場合
半角スペースを除外し「全角スペースのみ」をマッチさせたい場合は、Unicodeコードポイント指定構文である \x{3000} を使用すると確実です。
- 補足:全角スペースのみをピンポイントで指定したい場合
- 抽出された数字は「文字列型」になる
REGEXEXTRACT で "\d+" を使って数字を取り出しても、結果は数値ではなくテキストです。
そのまま SUM 関数などで集計しようとすると無視されるため、計算に使う場合は必ず =VALUE(REGEXEXTRACT(...)) や --REGEXEXTRACT(...) で数値化してください。 - 大文字・小文字の「デフォルトの挙動」の違い
Excelの一般的な関数(SEARCH など)はデフォルトで大文字・小文字を区別しませんが、REGEX関数群はデフォルト(省略時)で「大文字と小文字を区別(case_sensitivity = 0)」します。
区別せずに検索・抽出したい場合は、明示的に最後の引数に 1 を指定してください。 - 大量データ処理時の再計算コスト
数万行におよぶ大規模なデータシート全域に複雑な正規表現関数を埋め込むと、ブックの再計算速度が低下する場合があります。
確定したクレンジング結果については、コピーして「値として貼り付け」を行っておくのが実務上の定石です。
正規表現リファレンス(メタ文字・特殊シーケンス一覧)
※メタ文字そのものを文字としてマッチさせたい場合は、直前に「\」(バックスラッシュ/円マーク)を付けてエスケープします。
※ExcelのREGEX関数(REGEXTEST、REGEXEXTRACT、REGEXREPLACE)の正規表現パターンは、PCRE2のflavorに基づいています。なお、Excel独自の関数仕様もあります。
【メタ文字一覧】
^ $ . * + ? ( ) [ ] { } | \1. 位置マッチング(アンカー)
| シンボル | 説明 | 例・補足 |
|---|---|---|
| ^ | 文字列の先頭にマッチ | ^ABC(先頭のABC) |
| $ | 文字列の末尾にマッチ | XYZ$(末尾のXYZ) |
| \b | 単語の境界にマッチ | \bExcel\b(単語としてのExcel) |
| \B | 単語の境界ではない位置にマッチ | \BExcel |
2. 特殊文字・エスケープ
| シンボル | 説明 | 例・補足 |
|---|---|---|
| \n | 改行(LF)にマッチ | セル内改行の検出 |
| \r | キャリッジリターン(CR)にマッチ | CRLF(\r\n)など |
| \t | 水平タブにマッチ | |
| \x{...} | 16進数で指定したUnicodeコードポイントにマッチ | \x{3000}(全角スペース) |
| \記号 | メタ文字などをエスケープし、その文字自体にマッチ | \? \* \+ \. \( \[ など |
3. 文字クラス・特殊シーケンス
| シンボル | 説明 | 例・補足 |
|---|---|---|
| . | 改行以外の任意の1文字にマッチ | A.C(ABC、A1Cなど) |
| [xyz] | 括弧内のいずれか1文字にマッチ | [abc](a、b、cのいずれか) |
| [^xyz] | 括弧内の文字以外の1文字にマッチ(否定) | [^0-9](数字以外の文字) |
| [a-z] | ハイフンで範囲を指定した文字にマッチ | [0-9](半角数字) [a-zA-Z](半角英字) |
| \d | 数字にマッチ | Excelでは全角数字(0~9)も含まれます |
| \D | 数字以外の文字にマッチ | [^\d] と等価 |
| \w | 単語構成文字にマッチ | 英数字、アンダースコア、その他のUnicode文字など |
| \W | 単語構成文字以外の文字にマッチ | [^\w] と等価 |
| \s | 空白文字にマッチ | 半角・全角スペース、改行、タブなど |
| \S | 空白以外の文字にマッチ | [^\s] と等価 |
| \p{...} | 指定したUnicodeプロパティ(文字種)にマッチ | \p{Hiragana}(ひらがな)\p{Katakana}(カタカナ)\p{Han}(漢字) |
4. 繰り返し(量限定子)
| シンボル | 説明 | 例・補足 |
|---|---|---|
| ? | 直前の文字またはグループが0回または1回(省略可能) | https?(httpまたはhttps) |
| * | 直前の文字またはグループが0回以上繰り返す(最長一致) | A* |
| + | 直前の文字またはグループが1回以上繰り返す(最長一致) | \d+(連続する数字) |
| {n} | 直前の文字またはグループがちょうどn回繰り返す | \d{4}(4桁の数字) |
| {n,} | 直前の文字またはグループがn回以上繰り返す | \d{3,}(3桁以上の数字) |
| {n,m} | 直前の文字またはグループがn回以上m回以下繰り返す | \d{2,4}(2?4桁の数字) |
| *? / +? / ?? | 最短一致(非貪欲マッチ) 条件を満たす最小限の範囲でマッチさせます |
\[.*?\](最初の閉じ角括弧まで) |
5. グループ化・条件・位置指定(Lookaround)
| シンボル | 説明 | 例・補足 |
|---|---|---|
| ( ... ) | キャプチャグループ(参照や抽出対象として保持) | (\d{3})-(\d{4}) |
| (?: ... ) | 非キャプチャグループ(キャプチャせずにパターンをまとめる) | (?:北海道|東京都) |
| A|B | 選択(OR条件:AまたはB) | 緊急|至急|重要 |
| (?=...) | 肯定先読み:指定パターンが直後に続く位置にマッチ | [0-9]+(?=円)(「円」の直前の数値) |
| (?!...) | 否定先読み:指定パターンが直後に続かない位置にマッチ | ABC(?!XYZ)(直後にXYZがないABC) |
| (?<=...) | 肯定後読み:指定パターンが直前にある位置にマッチ | (?<=売上: )[0-9]+(「売上: 」の直後の数値) |
| (?<!...) | 否定後読み:指定パターンが直前にない位置にマッチ | (?<!No\.)[0-9]+(前に「No.」がない数値) |
6. REGEXREPLACE用の置換参照記号
| シンボル | 説明 | 例・補足 |
|---|---|---|
| $1, $2, ... | パターン内のn番目のキャプチャグループ (...) を参照 |
$2 $1(要素の順序入れ替え) |
| $0 または $& | マッチした文字列全体を参照 | マッチした部分の前後に文字を付加する際などに使用 |
同じテーマ「エクセル関数応用」の記事
配列を自在に回転させる数式
掛け算(*)を使わない掛け算|足し算(+)を使わない足し算
2段階の入力規則リスト作成:最新関数対応
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン
「SUMIFSで動くのにXLOOKUPでエラー?」型不一致の関数別挙動
「Python in Excel」で自作関数を登録|アンピボット関数と計算順序
「Python in Excel」数独(ナンプレ)解法プログラムの移植と最適化
Excel表とMarkdownテーブルを相互変換する数式
可変長配列をVSTACKする4つの方法|REDUCE・Thunk・チャンク・再帰分割
Excelの正規表現関数(REGEXTEST・REGEXREPLACE・REGEXEXTRACT)の使い方
「Python in Excel」入門:コードを読むための基礎知識
新着記事NEW ・・・新着記事一覧を見る
Excelの新機能「リストとセル内配列」:1つのセルに複数の値|エクセル入門(2026-09-28)
Excel関数クロスワード(2026-09-26)
Excelショートカットキークイズ(2026-09-23)
Excel関数名クイズ(2026-09-21)
気ままに一手|リレー将棋(2026-09-20)
ITエンジニアがトラブルを避けるための法律・契約入門|エクセル雑感(2026-09-18)
ITエンジニアなら知らないと恥ずかしい数学20選|エクセル雑感(2026-09-17)
ITエンジニアのための税金と社会保険のお話|エクセル雑感(2026-09-15)
ITエンジニアのための経理・会計・簿記入門|エクセル雑感(2026-09-12)
「Python in Excel」入門:コードを読むための基礎知識|エクセル関数応用(2026-09-10)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.Excelショートカットキー一覧|Excelリファレンス
5.RangeとCellsの使い方|VBA入門
6.FILTER関数(範囲をフィルター処理)|エクセル入門
7.マクロとは?VBAとは?VBAでできること|VBA入門
8.繰り返し処理(For Next)|VBA入門
9.メッセージボックス(MsgBox関数)|VBA入門
10.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.
