REGEXREPLACEは、正規表現に一致した部分を、別の文字に置き換える関数です。
SUBSTITUTE が「特定の文字」を置き換えるのに対し、REGEXREPLACEは「パターン」で置き換えます。 複数種類の文字をまとめて処理できるのが強みです。
Excelにはありません。 スプレッドシート固有の関数です。
書式
=REGEXREPLACE(文字列, 正規表現, 置換文字)
一致したすべての箇所が置き換わります。1箇所だけということはできません。
正規表現の最小限の知識
| 記号 | 意味 | |
|---|---|---|
\d |
数字1文字 | |
\D |
数字以外1文字 | |
\s |
空白1文字 | |
. |
任意の1文字 | |
+ |
直前を1回以上 | |
* |
直前を0回以上 | |
[abc] |
a か b か c | |
[^abc] |
a b c 以外 | |
^ |
先頭 | |
$ |
末尾 | |
(...) |
キャプチャ(後で $1 で参照) |
|
| `\ | ` | または |
. ( ) - などを文字そのものとして扱うときは、前に \ を付けます。
不要な文字を一括削除する
REGEXREPLACEの最頻出の用途です。
ハイフン・スペースをまとめて削除
=REGEXREPLACE(A1, "[- ]", "")
[- ] は「ハイフン、半角スペース、全角スペースのどれか」という意味です。
SUBSTITUTE だと入れ子が3重になります。
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1, "-", ""), " ", ""), " ", "")
削除対象が3つを超えたら、REGEXREPLACEに切り替えるのが実用的な目安です。
数字以外を全部削除する
=REGEXREPLACE(A1, "\D", "")
電話番号や郵便番号から記号を除いて、数字だけにできます。
計算に使うなら VALUE で数値化してください。
=VALUE(REGEXREPLACE(A1, "\D", ""))
全角数字を含めて処理する
=VALUE(REGEXREPLACE(ASC(A1), "\D", ""))
ASC で全角を半角に変換してから処理します。
記号だけ削除して文字は残す
=REGEXREPLACE(A1, "[^\w\sぁ-んァ-ン一-龥]", "")
連続する空白を1つにまとめる
=REGEXREPLACE(A1, "\s+", " ")
改行を削除する
=REGEXREPLACE(A1, "\n", "")
CSVやWebからコピーしたデータに紛れ込む改行を除去できます。
キャプチャで並べ替える
REGEXREPLACEの最も強力な機能です。
() で囲んだ部分を、置換文字の中で $1 $2 として参照できます。
姓名を入れ替える
=REGEXREPLACE(A1, "^(\S+)\s+(\S+)$", "$2 $1")
山田 太郎 → 太郎 山田
日付の形式を変える
=REGEXREPLACE(A1, "(\d{4})/(\d{1,2})/(\d{1,2})", "$1年$2月$3日")
2026/4/1 → 2026年4月1日
元が文字列の日付の場合に使えます。日付型なら TEXT を使ってください。
電話番号を整形する
=REGEXREPLACE(REGEXREPLACE(A1, "\D", ""), "^(\d{2,4})(\d{4})(\d{4})$", "$1-$2-$3")
内側でまず数字だけにして、外側でハイフンを入れています。
全行に適用する
ARRAYFORMULA が確実に効きます。
=ARRAYFORMULA(IF(A2:A="", "", REGEXREPLACE(A2:A, "[- ]", "")))
データ整形を1本の数式で全行に効かせられるので、CSVの前処理に強い組み合わせです。
REGEXEXTRACT・REGEXMATCHとの使い分け
| 関数 | 用途 | 一致しないとき |
|---|---|---|
| REGEXREPLACE | 置き換える | 元の文字列がそのまま返る |
| REGEXEXTRACT | 取り出す | #N/A |
REGEXMATCH |
判定する | FALSE |
REGEXREPLACEは一致しなくてもエラーになりません。 元の文字列がそのまま返ります。IFERROR で包む必要がないのは、REGEXEXTRACT にはない利点です。
大文字小文字を区別しない
先頭に (?i) を付けます。
=REGEXREPLACE(A1, "(?i)tokyo", "東京")
SUBSTITUTE は大文字小文字を区別するので、区別せずに置換したいときはこちらを使ってください。
よくある問題
置き換わらない
- – パターンが実際のデータと一致していない
- – 全角と半角が違う(
ーと-、1と1) - – 特殊文字をエスケープしていない(
.()[]*+?\)
. を文字として扱いたいなら \. と書いてください。
想定以上に置き換わる
- –
.を「任意の1文字」として使ってしまっている - –
+が貪欲に一致しすぎている →+?で最短一致に
結果が文字列になる
REGEXREPLACEの結果は常に文字列です。計算に使うなら VALUE で数値化してください。
#VALUE! が出る
正規表現の書き方が不正です。括弧の対応や、エスケープを確認してください。
まとめ
- – 書式は
=REGEXREPLACE(文字列, "正規表現", "置換文字") - – 一致したすべての箇所が置き換わる
- – 削除対象が3つを超えたら SUBSTITUTE から乗り換える
- –
()と$1で並べ替えができる(姓名の入れ替えなど) - – 一致しなくてもエラーにならない(元の文字列が返る)
- – 全行適用は ARRAYFORMULA で確実に効く
- – Excelには無い
関連する関数
- – REGEXEXTRACT — 正規表現で取り出す
- – SUBSTITUTE — 特定の文字を置き換える
- – ARRAYFORMULA — 全行に効かせる
- – TEXT — 日付や数値の書式を整える
- – 関数一覧に戻る
コメントを残す