スプレッドシートのREGEXREPLACE関数の使い方|正規表現で文字列を置換

スポンサーリンク

スプレッドシートで「電話番号のハイフンをまとめて消したい」「余分なスペースを一括で削除したい」と思ったことはありませんか? 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-56780312345678ハイフンを除去
090 1234 567809012345678スペースを除去
090-1234-567809012345678ハイフンを除去

s は「空白文字(スペース・タブなど)」を意味します。[-s] でハイフンと空白をまとめて指定できます。

余分なスペースを1つにまとめる

データの中に連続スペースが混在しているとき、すべて1つのスペースに統一します。

=REGEXREPLACE(A2, "s{2,}", " ")
セルの値結果
山田  太郎山田 太郎
東京都   渋谷区東京都 渋谷区

s{2,} は「空白文字が2つ以上連続」を意味します。これを1つのスペースに置換するわけです。TRIM関数では前後の空白しか除去できません。文中の連続スペースを整理したいならREGEXREPLACE関数が便利ですよ。

数字以外をすべて削除する

住所や備考欄から数字だけを取り出したいときに使います。

=REGEXREPLACE(A2, "[^0-9]", "")
セルの値結果
〒100-00011000001
部屋番号: 301号室301
TEL: 03-1234-56780312345678

[^0-9] は「数字以外の文字」を意味します。^ が角括弧の先頭にあると「否定」になります。

8桁の数字を日付形式に変換する

「20240315」のような8桁の数字を「2024/03/15」に変換します。

=REGEXREPLACE(A2, "(d{4})(d{2})(d{2})", "$1/$2/$3")
セルの値結果
202403152024/03/15
202312252023/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関数が圧倒的にシンプルですね。

比較表

比較項目REGEXREPLACESUBSTITUTE
正規表現使える使えない
パターン置換得意(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関数の記事でまとめています。そちらも合わせてチェックしてみてくださいね。

タイトルとURLをコピーしました