「電話番号のハイフンをまとめて消したい」「メールアドレスのドメイン部分だけを伏せ字にしたい」。データ整理をしていると、こういう一括置換の場面はよくありますよね。
これまでのExcelでは、SUBSTITUTE関数を何重にもネストしたり、マクロを書いたりするしかありませんでした。数式が長くなって、後から見直すのも一苦労ですよね。
そんな悩みを一発で解決してくれるのがREGEXREPLACE関数です。正規表現を使って、セルの文字列を柔軟に置換できます。
この記事では、ExcelのREGEXREPLACE関数の使い方を基本から実務例まで解説します。キャプチャグループを使った高度な置換や、SUBSTITUTE関数との使い分けもまとめましたので、ぜひ参考にしてください。
ExcelのREGEXREPLACE関数とは?
REGEXREPLACE関数は、セルの文字列のうち正規表現パターンに一致する部分を、別の文字列に置換するExcelの関数です。読み方は「レジェックスリプレイス」です。
2024年にMicrosoft 365へ追加された新しい関数で、REGEXTEST・REGEXEXTRACTと合わせて「正規表現3関数」と呼ばれています。
固定の文字列を置換するだけならSUBSTITUTE関数で十分ですが、「数字だけまとめて消したい」「特定パターンの部分を伏せ字にしたい」といったパターン指定が必要なケースで、REGEXREPLACE関数が真価を発揮しますよ。
どんなときに使う関数か
REGEXREPLACE関数は次のようなシーンで活躍します。
- 電話番号・郵便番号からハイフンを一括で取り除きたいとき
- メールアドレスや個人情報を伏せ字にマスキングしたいとき
- 余分な空白・記号・改行をまとめて除去してデータクレンジングしたいとき
- HTMLタグを取り除いて本文だけを取り出したいとき
- 日付の区切り文字を一括変換したいとき
従来のSUBSTITUTEネストと比べると、数式がすっきりして読みやすくなりますよ。
利用条件(Microsoft 365が必須)
ExcelのREGEXREPLACE関数を使うには、Microsoft 365のサブスクリプションが必要です。Excel 2019やExcel 2021などの永続ライセンス版では使えません。
対応環境は次のとおりです。
- Excel for Microsoft 365(Windows / Mac)
- Excel for the web
お使いのバージョンが対応しているか、確認しておきましょう。バージョンが古いと #NAME? エラーになってしまいます。
REGEXREPLACE関数の構文と引数
基本構文
=REGEXREPLACE(テキスト, 正規表現パターン, 置換文字列, [出現位置], [大文字小文字の区別])
必須の引数は最初の3つで、後ろの2つは省略できます。
第1引数:テキスト
置換対象となる文字列またはセル参照を指定します。
=REGEXREPLACE("03-1234-5678", "-", "")
=REGEXREPLACE(A2, "-", "")
直接文字列を入れる場合はダブルクォーテーションで囲みます。実務ではセル参照を使うことがほとんどです。
第2引数:正規表現パターン
置換したい部分を表す正規表現をダブルクォーテーションで囲んで指定します。
=REGEXREPLACE(A2, "d", "*")
上の例は「A2の中の数字を1文字ずつアスタリスクに置き換える」という意味です。d は数字1文字を表す記号です。
第3引数:置換文字列
マッチした部分を何に置き換えるかを指定します。空文字列 "" を指定すれば「削除」と同じ意味になりますよ。
=REGEXREPLACE(A2, "s", "")
この例ではすべての空白文字を削除します。
第4引数:出現位置
何番目のマッチから置換するかを数値で指定します。省略すると0になり、すべてのマッチを置換します。
- 0(省略時):すべてのマッチを置換
- 1:1番目のマッチだけを置換
- 2:2番目のマッチだけを置換
=REGEXREPLACE("a-b-c-d", "-", "/", 0) '結果: a/b/c/d
=REGEXREPLACE("a-b-c-d", "-", "/", 2) '結果: a-b/c-d
最初の1箇所だけ置換したい場面でも使える、意外と便利な引数ですよ。
第5引数:大文字小文字の区別
英字を含むパターンで大文字と小文字を区別するかを指定します。省略すると0(区別する)です。
- 0(省略時):大文字と小文字を区別する
- 1:大文字と小文字を区別しない
=REGEXREPLACE("ABC abc", "[a-z]", "*") '結果: ABC ***
=REGEXREPLACE("ABC abc", "[a-z]", "*", , 1) '結果: *** ***
正規表現の基本パターン早見表
REGEXREPLACE関数で使える正規表現は、REGEXTEST・REGEXEXTRACTと同じPCRE2(Perl互換の正規表現)です。よく使う記号をまとめておきます。
| 記号 | 意味 | |
|---|---|---|
d | 数字1文字(0〜9) | |
D | 数字以外の1文字 | |
w | 英数字またはアンダースコア | |
s | 空白文字(半角スペース・タブ・改行) | |
. | 任意の1文字 | |
[abc] | a・b・cのいずれか1文字 | |
[a-z] | a〜zのいずれか1文字 | |
[^0-9] | 0〜9以外の1文字 | |
^ | 文字列の先頭 | |
$ | 文字列の末尾 | |
* | 直前の0回以上の繰り返し | |
+ | 直前の1回以上の繰り返し | |
{n} | 直前のn回の繰り返し | |
| ` | ` | または |
TIP
特殊記号そのものを置換対象にしたいときは
でエスケープします。たとえば「.」を消したいなら.と書きます。
置換文字列側では、後述する $1 $2 といった「キャプチャグループ参照」が使えます。これがREGEXREPLACE関数の真骨頂ですよ。
Excel REGEXREPLACE関数の基本的な使い方
それでは実際に数式を組み立ててみましょう。
電話番号からハイフンを除去する
もっとも使用頻度が高いパターンです。A列に入った電話番号から、ハイフンをまとめて削除します。
=REGEXREPLACE(A2, "-", "")
| A列(入力値) | B列(=REGEXREPLACEの結果) |
|---|---|
| 03-1234-5678 | 0312345678 |
| 090-1234-5678 | 09012345678 |
| 06-1111-2222 | 0611112222 |
SUBSTITUTE関数でも同じことはできますが、REGEXREPLACEなら全角ハイフンや長音記号まで一度に消せる柔軟性が魅力です(後述)。
数字以外を一括削除する
電話番号欄に括弧や全角スペースなどが混じっていても、一発で数字だけにできます。
=REGEXREPLACE(A2, "D", "")
D は「数字以外の1文字」を表す記号です。「03-1234-5678(内線1)」のような入力でも、「0312345678 1」のように数字と元の配置を保ったまま、不要な記号をまとめて消せますよ。
余分な空白をまとめて削除する
セル内に混じった全角・半角スペース、タブ、改行をまとめて除去します。
=REGEXREPLACE(A2, "s+", "")
s+ は「1文字以上の連続した空白」を表します。貼り付けたデータに見えない空白が入っているときの掃除にぴったりですよ。
連続する空白を半角1つにまとめる
空白を完全に消すのではなく、連続分だけ1つに整えたい場合はこちらです。
=REGEXREPLACE(A2, "s+", " ")
「Hello World」→「Hello World」のように整形されます。コピペ由来のズレを直すのに便利ですよ。
実践的な使い方・応用例
メールアドレスのドメイン部分をマスキングする
個人情報保護のために、メールアドレスの @ より後ろを伏せ字にする例です。
=REGEXREPLACE(A2, "@.+$", "@***")
| A列(入力値) | B列(=REGEXREPLACEの結果) |
|---|---|
| taro@example.com | taro@*** |
| hanako@biz-tactics.co.jp | hanako@*** |
@.+$ は「アットマーク+1文字以上の末尾まで」を意味します。会議資料やサンプルデータを作成するときに重宝しますよ。
HTMLタグを削除して本文だけ取り出す
Webから貼り付けた文字列からHTMLタグをまとめて除去する例です。
=REGEXREPLACE(A2, "<[^>]+>", "")
<[^>]+> は「< で始まり > 以外の文字が1つ以上続き > で閉じる部分」を表します。
「 こんにちは」→「こんにちは世界」のように、タグだけがきれいに消えます。
世界
全角・半角・長音記号のハイフンをまとめて除去する
電話番号の表記揺れ対策です。半角ハイフン・全角ハイフン・マイナス・長音記号をまとめて削除します。
=REGEXREPLACE(A2, "[--−ー]", "")
角括弧の中に「消したい文字」を並べるだけでOKです。SUBSTITUTEでやろうとすると4重ネストが必要なところを、1つの数式で書けますよ。
日付の区切り文字を統一する
/ . - など複数の区切りが混在した日付を、ハイフン区切りに統一する例です。
=REGEXREPLACE(A2, "[/.-]", "-")
| A列(入力値) | B列(=REGEXREPLACEの結果) |
|---|---|
| 2026/04/09 | 2026-04-09 |
| 2026.04.09 | 2026-04-09 |
| 2026-04-09 | 2026-04-09 |
角括弧内のハイフンは - とエスケープしておくと安全です。
キャプチャグループで並び順を入れ替える
REGEXREPLACE関数の真骨頂が、キャプチャグループを使った高度な置換です。丸括弧 () で囲んだ部分は「キャプチャグループ」となり、置換文字列側で $1 $2 として参照できます。
「姓 名」を「名 姓」に入れ替える例です。
=REGEXREPLACE(A2, "^(S+)s+(S+)$", "$2 $1")
| A列(入力値) | B列(=REGEXREPLACEの結果) |
|---|---|
| 山田 太郎 | 太郎 山田 |
| Suzuki Hanako | Hanako Suzuki |
(S+) は「空白以外の1文字以上」をキャプチャするパターンで、置換文字列の $2 $1 で順番を入れ替えています。慣れると応用が効くので、ぜひ覚えておきましょう。
日付のフォーマットを変換する
yyyy/mm/dd 形式の日付文字列を、dd-mm-yyyy 形式に並び替える例です。
=REGEXREPLACE(A2, "(d{4})/(d{2})/(d{2})", "$3-$2-$1")
「2026/04/09」→「09-04-2026」のように、年月日のパーツを順番入れ替えで出力できます。元データを壊さずに表示形式を変えたいときに便利ですよ。
REGEXREPLACEとSUBSTITUTE関数の使い分け
REGEXREPLACE関数とよく比較されるのがSUBSTITUTE関数です。どちらも「文字列置換」が目的ですが、得意分野が異なります。
| 関数 | 置換対象 | 向いているケース |
|---|---|---|
| SUBSTITUTE | 固定文字列 | 「-」を「」に、など決まった文字の置換 |
| REGEXREPLACE | 正規表現パターン | 「数字全般」「記号全般」などのパターン置換 |
使い分けの目安は次のとおりです。
- 固定文字列の置換 → SUBSTITUTEが速くてシンプル
- パターンに基づく置換 → REGEXREPLACEの独壇場
- 複数の文字をまとめて消す → REGEXREPLACE(
[abc]形式) - 並び順の入れ替え → REGEXREPLACEのキャプチャグループ
SUBSTITUTEは全バージョンのExcelで使えるのが強みです。共有ファイルで相手のバージョンが不明な場合は、SUBSTITUTEのネストで対応した方が安全な場面もありますよ。
よくあるエラーと対処法
REGEXREPLACE関数で表示されるエラーと対処法をまとめました。
#VALUE! エラー
原因: 第2引数に無効な正規表現を指定した。または第1引数に数値や日付などの非文字列を直接渡した。
対処法: 正規表現パターンを見直しましょう。特にカッコや特殊記号のエスケープ忘れに注意してください。数値セルを渡す場合はTEXT関数で文字列化してから渡します。
=REGEXREPLACE(TEXT(A2, "0"), "0", "*")
#NAME? エラー
原因: REGEXREPLACE関数に対応していないバージョンのExcelで使っている。または関数名のスペルミス。
対処法: Microsoft 365のサブスクリプションで最新版にアップデートしてください。Excel 2019・2021・LTSC 2024などでは使えません。関数名のスペルも確認しましょう。
置換結果が意図と違う
原因: 正規表現の「貪欲マッチ」が想定より広く一致している。たとえば 本文<.+> は 全体にマッチしてしまいます。
対処法: .+?(最短マッチ)を使うか、[^>]+ のように文字クラスで範囲を限定します。
=REGEXREPLACE(A2, "<.+?>", "")
=REGEXREPLACE(A2, "<[^>]+>", "")
| エラー | 原因 | 対処法 |
|---|---|---|
| #VALUE! | 無効な正規表現・非文字列 | パターン見直し・TEXTで変換 |
| #NAME? | 非対応バージョン | Microsoft 365に更新 |
| 置換結果がおかしい | 貪欲マッチで広がりすぎ | .+? か [^>]+ を使う |
エラーの原因はパターン記述ミスであることがほとんどです。落ち着いて数式を見直せば大丈夫ですよ。
REGEXTEST・REGEXEXTRACTとの使い分け
REGEXREPLACE関数には2つの姉妹関数があります。3つセットで覚えておくと、正規表現を使ったデータ処理が一気にラクになります。
| 関数 | 戻り値 | 用途 |
|---|---|---|
| REGEXTEST | TRUE / FALSE | パターンに一致するかを判定する |
| REGEXEXTRACT | 一致した文字列 | パターンに一致する部分を抜き出す |
| REGEXREPLACE | 置換後の文字列 | パターンに一致する部分を別の文字列に置き換える |
使い分けのイメージは次のとおりです。
- 「メールアドレスとして正しいか?」→ REGEXTEST
- 「本文からメールアドレスだけ抜き出したい」→ REGEXEXTRACT
- 「メールアドレスのドメインを伏せ字にしたい」→ REGEXREPLACE
3つとも同じPCRE2の正規表現を使うので、パターンの書き方は共通です。REGEXTESTやREGEXEXTRACTで覚えた知識は、そのままREGEXREPLACEでも活きますよ。
姉妹記事として、ExcelのREGEXTEST関数の使い方とExcelのREGEXEXTRACT関数の使い方もぜひ参考にしてください。3関数をまとめて身につけると、データクレンジング作業がぐっと効率化されますよ。
まとめ
REGEXREPLACE関数は、Excelのセル上で正規表現を使った柔軟な文字列置換ができる関数です。
この記事のポイントを整理します。
- 構文は
=REGEXREPLACE(テキスト, 正規表現パターン, 置換文字列, [出現位置], [大文字小文字の区別]) - Microsoft 365のサブスクリプションが必要
- 第4引数でN番目のマッチだけを置換することも可能
- 電話番号のハイフン除去・空白削除・HTMLタグ削除などデータクレンジングで大活躍
()と$1$2のキャプチャグループで並び順の入れ替えもできる- 固定文字列ならSUBSTITUTE、パターン置換ならREGEXREPLACEと使い分ける
- 姉妹関数にREGEXTEST(判定)とREGEXEXTRACT(抽出)がある
まずは =REGEXREPLACE("03-1234-5678", "-", "") のようなシンプルな置換から試してみてください。一度覚えれば、SUBSTITUTEの多重ネストとは比較にならない便利さを実感できますよ。
