タグ: REGEXREPLACE

  • REGEXREPLACE関数の使い方|正規表現でまとめて置き換える

    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/12026年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文字」として使ってしまっている
    • + が貪欲に一致しすぎている → +? で最短一致に

    結果が文字列になる

    REGEXREPLACEの結果は常に文字列です。計算に使うなら VALUE で数値化してください。

    #VALUE! が出る

    正規表現の書き方が不正です。括弧の対応や、エスケープを確認してください。

    まとめ

    • – 書式は =REGEXREPLACE(文字列, "正規表現", "置換文字")
    • 一致したすべての箇所が置き換わる
    • – 削除対象が3つを超えたら SUBSTITUTE から乗り換える
    • ()$1 で並べ替えができる(姓名の入れ替えなど)
    • 一致しなくてもエラーにならない(元の文字列が返る)
    • – 全行適用は ARRAYFORMULA で確実に効く
    • – Excelには無い

    関連する関数