スプレッドシートで「電話番号のハイフンをまとめて消したい」「余分なスペースを一括で削除したい」と思ったことはありませんか? SUBSTITUTE関数なら特定の文字を置換できます。でも、「数字だけ消す」「2つ以上の連続スペースを1つにする」といったパターン指定の置換には対応できません。
REGEXREPLACE関数を使えば、正規表現のパターンに一致する部分をまとめて置換できます。この記事ではREGEXREPLACE関数の基本から実務パターンまで丁寧に解説しますね。
REGEXREPLACE関数とは?正規表現で文字列を置換する関数
REGEXREPLACE関数は、セルの文字列から正規表現パターンに一致する部分を別の文字列に置換して返す関数です。読み方は「レジェックスリプレイス」。「Regex(正規表現)」+「Replace(置換)」が語源です。
たとえば「03-1234-5678」に対して - のパターンで空文字に置換すると「0312345678」が返ります。ハイフンをまとめて除去できるわけです。
REGEXREPLACE関数はGoogleスプレッドシート独自の関数で、Excelには存在しません。Excelで同じことをするにはVBAが必要です。スプレッドシートなら関数だけで正規表現の置換ができるのが大きな強みですよ。
「正規表現」って何?
正規表現とは、文字列のパターンを記号で表すルールです。たとえば [0-9]+ は「1文字以上の数字」を意味します。最初はとっつきにくく感じるかもしれません。でも、よく使うパターンは決まっています。この記事で紹介するパターンをコピーして使えばOKです。正規表現の記号一覧はREGEXMATCH関数の記事でまとめていますので、そちらも参考にしてください。
REGEXREPLACE関数の書き方(構文と引数)
基本構文
=REGEXREPLACE(テキスト, 正規表現, 置換文字列)
| 引数 | 必須/省略可 | 説明 |
|---|---|---|
| テキスト | 必須 | 置換対象の文字列またはセル参照 |
| 正規表現 | 必須 | 置換したいパターンの正規表現 |
| 置換文字列 | 必須 | 一致部分を置き換える文字列(空文字 "" で削除) |
戻り値は置換後の文字列です。パターンに一致する部分がなければ元の文字列がそのまま返ります。エラーにはならないのがREGEXEXTRACTとの違いです。
後方参照(キャプチャグループの再利用)
正規表現の括弧 () でキャプチャした部分を、置換文字列の中で $1、$2 のように参照できます。これを「後方参照」と呼びます。
=REGEXREPLACE("20240315", "(d{4})(d{2})(d{2})", "$1/$2/$3")
→ "2024/03/15"(8桁の数字を日付形式に変換)
$1 は1番目の括弧、$2 は2番目の括弧に一致した部分です。この仕組みを使えば「削除」だけでなく「並べ替え」や「書式変換」もできますよ。
REGEXREPLACE関数の基本的な使い方
特定の文字を削除する
セルA2に「03-1234-5678」が入っているとします。
=REGEXREPLACE(A2, "-", "") → "0312345678"(ハイフンを削除)
第3引数を空文字 "" にすると、一致した部分が削除されます。REGEXREPLACE関数はパターンに一致する部分をすべて置換します。ハイフンが2つあっても、両方とも一度に消えますよ。
数字だけを削除する
セルA2に「ABC-123-DEF」が入っているとします。
=REGEXREPLACE(A2, "[0-9]", "") → "ABC--DEF"(数字だけ削除)
=REGEXREPLACE(A2, "[0-9-]", "") → "ABCDEF"(数字とハイフンを削除)
[0-9] は「数字1文字」を意味します。角括弧の中にハイフンも入れれば、まとめて削除できます。
特定の文字を別の文字に置換する
セルA2に「2024/03/15」が入っているとします。
=REGEXREPLACE(A2, "/", "-") → "2024-03-15"(スラッシュをハイフンに変換)
単純な文字置換ならSUBSTITUTE関数でもできます。REGEXREPLACE関数の真価は、次のようなパターン置換にあります。
大文字・小文字を区別せずに置換する
REGEXREPLACE関数はデフォルトで大文字と小文字を区別します。区別せずに置換したいときは (?i) を先頭に付けます。
=REGEXREPLACE("Hello World", "(?i)hello", "Hi")
→ "Hi World"(大文字小文字を無視して置換)
(?i) は「case-insensitive(大文字小文字を無視)」のフラグです。英語データを扱うときに便利ですね。
実務で使えるパターン集
電話番号のハイフンを一括削除する
電話番号からハイフンやスペースを取り除いて数字だけにします。
=REGEXREPLACE(A2, "[-s]", "")
| セルの値 | 結果 | 説明 |
|---|---|---|
| 03-1234-5678 | 0312345678 | ハイフンを除去 |
| 090 1234 5678 | 09012345678 | スペースを除去 |
| 090-1234-5678 | 09012345678 | ハイフンを除去 |
s は「空白文字(スペース・タブなど)」を意味します。[-s] でハイフンと空白をまとめて指定できます。
余分なスペースを1つにまとめる
データの中に連続スペースが混在しているとき、すべて1つのスペースに統一します。
=REGEXREPLACE(A2, "s{2,}", " ")
| セルの値 | 結果 |
|---|---|
| 山田 太郎 | 山田 太郎 |
| 東京都 渋谷区 | 東京都 渋谷区 |
s{2,} は「空白文字が2つ以上連続」を意味します。これを1つのスペースに置換するわけです。TRIM関数では前後の空白しか除去できません。文中の連続スペースを整理したいならREGEXREPLACE関数が便利ですよ。
数字以外をすべて削除する
住所や備考欄から数字だけを取り出したいときに使います。
=REGEXREPLACE(A2, "[^0-9]", "")
| セルの値 | 結果 |
|---|---|
| 〒100-0001 | 1000001 |
| 部屋番号: 301号室 | 301 |
| TEL: 03-1234-5678 | 0312345678 |
[^0-9] は「数字以外の文字」を意味します。^ が角括弧の先頭にあると「否定」になります。
8桁の数字を日付形式に変換する
「20240315」のような8桁の数字を「2024/03/15」に変換します。
=REGEXREPLACE(A2, "(d{4})(d{2})(d{2})", "$1/$2/$3")
| セルの値 | 結果 |
|---|---|
| 20240315 | 2024/03/15 |
| 20231225 | 2023/12/25 |
後方参照 $1/$2/$3 を使って、キャプチャした年・月・日をスラッシュ区切りに並べ替えています。
HTMLタグを一括除去する
Webからコピーしたデータに混じったHTMLタグを取り除きます。
=REGEXREPLACE(A2, "<[^>]+>", "")
| セルの値 | 結果 |
|---|---|
重要なお知らせ | 重要なお知らせ |
リンク | リンク |
<[^>]+> は「< で始まり > で終わるタグ」を意味します。Webからのデータ貼り付けで重宝しますね。
ARRAYFORMULA関数と組み合わせて一括置換する
ARRAYFORMULA関数と組み合わせれば、複数行を一括で処理できます。
=ARRAYFORMULA(REGEXREPLACE(A2:A100, "-", ""))
この数式をB2セルに1つ入れるだけで、A2からA100までのデータからハイフンを一括削除できます。
よくあるエラーと対処法
| エラー | 原因 | 対処法 |
|---|---|---|
| #VALUE! | テキストが数値 | =REGEXREPLACE(TEXT(A2,"0"), "パターン", "置換") で文字列に変換 |
| #VALUE! | テキストが空セル | =IF(A2="", "", REGEXREPLACE(A2, "パターン", "置換")) で空チェック |
| #REF! | 正規表現の構文エラー | 括弧の閉じ忘れ・エスケープ漏れを確認 |
| 置換されない | パターンの大文字小文字が不一致 | (?i) を先頭に付けて大文字小文字を無視 |
数値セルで#VALUE!エラーになるケース
REGEXREPLACE関数の第1引数は文字列が必要です。セルに数値が入っている場合は#VALUE!エラーになります。
=REGEXREPLACE(A2, "d", "X") → A2が数値だと #VALUE!
=REGEXREPLACE(TEXT(A2, "0"), "d", "X") → TEXT関数で文字列に変換すればOK
数値を置換したい場合は、TEXT関数で文字列に変換してから渡しましょう。
正規表現の特殊文字をエスケープし忘れるケース
ピリオド .、括弧 ()、プラス + などは正規表現の特殊文字です。これらの文字そのものを置換したい場合は でエスケープしてください。
=REGEXREPLACE(A2, ".", "X") → すべての文字がXに置換される
=REGEXREPLACE(A2, ".", "X") → ピリオドだけがXに置換される
SUBSTITUTE関数との違い
SUBSTITUTE関数でも文字列の置換はできます。REGEXREPLACE関数との違いを整理しましょう。
同じ処理を両方で書いてみる
電話番号「03-1234-5678」からハイフンを除去する場合です。
SUBSTITUTE関数の場合:
=SUBSTITUTE(A2, "-", "")
REGEXREPLACE関数の場合:
=REGEXREPLACE(A2, "-", "")
この例では同じ結果になります。では「数字だけを削除する」場合はどうでしょう。
SUBSTITUTE関数の場合:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(
SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(
A2,"0",""),"1",""),"2",""),"3",""),"4",""),"5",""),"6",""),"7",""),"8",""),"9","")
REGEXREPLACE関数の場合:
=REGEXREPLACE(A2, "[0-9]", "")
パターン置換ではREGEXREPLACE関数が圧倒的にシンプルですね。
比較表
| 比較項目 | REGEXREPLACE | SUBSTITUTE |
|---|---|---|
| 正規表現 | 使える | 使えない |
| パターン置換 | 得意(1つの数式で完結) | 苦手(ネストが必要) |
| 大文字小文字の区別 | 区別する((?i) で無視可) | 区別する |
| 一致しない場合 | 元の文字列を返す | 元の文字列を返す |
| 置換回数の指定 | できない(すべて置換) | 第4引数で指定可能 |
| Excel互換 | なし(Sheets独自) | あり |
| 学習コスト | 正規表現の知識が必要 | 低い |
どちらを使うべき?
- 固定の文字を置換(ハイフンを消す、「株式会社」を「(株)」に変える)→ SUBSTITUTE関数で十分
- パターンで置換(数字をすべて消す、連続スペースを詰める)→ REGEXREPLACE関数一択
- N番目だけ置換(2つ目のハイフンだけ消す)→ SUBSTITUTE関数の第4引数
- Excelとの互換性が必要 → SUBSTITUTE関数を使う
固定文字の置換ならSUBSTITUTE、パターン置換ならREGEXREPLACEと覚えておけば迷いません。
REGEXMATCH・REGEXEXTRACTとの使い分け
スプレッドシートには正規表現を使う関数が3つあります。目的で使い分けましょう。
| 関数 | 目的 | 戻り値 | 使用例 |
|---|---|---|---|
| REGEXMATCH | パターンに一致するか判定 | TRUE / FALSE | 入力チェック、条件分岐 |
| REGEXEXTRACT | パターンに一致する部分を抽出 | 一致した文字列 | ドメイン抽出、番号取り出し |
| REGEXREPLACE | パターンに一致する部分を置換 | 置換後の文字列 | ハイフン除去、書式統一 |
具体例で比較
セルA2に「注文番号: ORD-2024-0123」が入っているとします。
=REGEXMATCH(A2, "ORD-d{4}-d{4}")
→ TRUE(注文番号パターンに一致するか判定)
=REGEXEXTRACT(A2, "ORD-d{4}-d{4}")
→ "ORD-2024-0123"(注文番号部分を抽出)
=REGEXREPLACE(A2, "ORD-", "")
→ "注文番号: 2024-0123"(「ORD-」を除去)
判定はREGEXMATCH、抽出はREGEXEXTRACT、置換はREGEXREPLACEと覚えておきましょう。これでREGEX3関数シリーズはすべて揃いました。
まとめ
REGEXREPLACE関数は、正規表現でパターンに一致する部分を置換できるスプレッドシート独自の関数です。
- 基本:
=REGEXREPLACE(テキスト, 正規表現, 置換文字列)で一致部分を置換 - 後方参照: 括弧
()でキャプチャした部分を$1$2で再利用できる - 実務活用: ハイフン除去・連続スペース整理・数字以外の削除・HTMLタグ除去に最適
- 使い分け: 固定文字の置換はSUBSTITUTE、パターン置換はREGEXREPLACE
- REGEX3関数: 判定はREGEXMATCH、抽出はREGEXEXTRACT、置換はREGEXREPLACE
SUBSTITUTE関数ではカバーしきれないパターン置換が必要なとき、ぜひ活用してみてください。正規表現の基本はREGEXMATCH関数の記事でまとめています。そちらも合わせてチェックしてみてくださいね。
