REGEX関数の使い方|正規表現で含むか調べる・取り出す・置き換える(REGEXTEST・REGEXEXTRACT・REGEXREPLACE)

REGEX関数の使い方|正規表現で含むか調べる・取り出す・置き換える(REGEXTEST・REGEXEXTRACT・REGEXREPLACE)

エクセルの REGEX 関数は、「正規表現」というパターンで文字を探す関数です。REGEXTEST(含むか調べる)・REGEXEXTRACT(取り出す)・REGEXREPLACE(置き換える)の 3 つがあります。「数字 2〜4 けた-4 けた-4 けた」のような形で探せるので、FIND や MID では書きにくかった「電話番号だけ取り出す」が 1 つの式でできます。

この記事では、よく使うパターンと 3 つの関数の使い方を、実際の Excel で確かめた結果で説明します。REGEX 関数は Microsoft 365 の新しい関数です。

練習用Excelファイル(無料ダウンロード)
メモの表と、この記事の REGEX 関数の式をまとめた練習ファイルです。パターンを書き換えて試せます。
Excelファイル(.xlsx)/登録不要/数式・練習データ入り
目次

REGEX 関数(3 つ)の書き方

=REGEXTEST(文字列, パターン, [大文字小文字])
=REGEXEXTRACT(文字列, パターン, [返す形], [大文字小文字])
=REGEXREPLACE(文字列, パターン, 置き換える文字, [何番目], [大文字小文字])
パターンの書き方意味
\d数字 1 文字(0〜9)
\d{4}数字 4 文字
\d{2,4}数字 2〜4 文字
\d+数字が 1 文字以上続いたところ
[A-Z]英大文字 1 文字
[^0-9]数字以外の 1 文字
^・$先頭・末尾
( )まとまり(REGEXEXTRACT で取り出す部分)

上の表は、パターンでよく使う書き方です。\d{2,4}-\d{4}-\d{4} なら「数字 2〜4 文字、ハイフン、数字 4 文字、ハイフン、数字 4 文字」で、電話番号の形になります。

日本語の Excel では、\ がセルの中で「¥」と表示されます。入力はキーボードの「¥」キーで大丈夫です(同じ文字として扱われます)。この記事の画像でも、セルの中は ¥d、数式バーは \d と見えています。

1. 電話番号を含むか調べる(REGEXTEST)

REGEXTEST は、パターンに合う部分があれば TRUE、無ければ FALSE を返します。範囲を渡すと、行ごとの結果が並びます。

=REGEXTEST(A2:A7,"\d{2,4}-\d{4}-\d{4}")
エクセルのREGEXTEST関数で電話番号の形を含むかを行ごとに調べた画面
エクセルのREGEXTEST関数で電話番号の形を含むかを行ごとに調べた画面

結果は上から FALSE・TRUE・TRUE・FALSE・FALSE・TRUE でした。「品番 ABC-77」のように、ハイフンがあっても形が違えば FALSE になります。COUNTIF のワイルドカード(*)では「数字が 4 けた」のような指定はできないので、ここが REGEX の強みです。

2. 文の中から電話番号だけ取り出す(REGEXEXTRACT)

REGEXEXTRACT は、パターンに合った部分を取り出します。見つからない行は #N/A になるので、IFERROR で空欄にしています。

=IFERROR(REGEXEXTRACT(A2:A7,"\d{2,4}-\d{4}-\d{4}"),"")
エクセルのREGEXEXTRACT関数で文の中から電話番号だけを取り出した画面
エクセルのREGEXEXTRACT関数で文の中から電話番号だけを取り出した画面

「電話 03-1234-5678 まで」から「03-1234-5678」、「TEL:090-9876-5432」から「090-9876-5432」が取り出せました。番号の前後の文字や長さがばらばらでも、形で探すので 1 つの式で済みます。

3. 数字のかたまりを全部取り出す

3 つ目の返す形を 1 にすると、合う部分を全部、横に並べて返します(0 または省略で最初の 1 つだけ)。

=REGEXEXTRACT(A3,"\d+",1)
エクセルのREGEXEXTRACT関数の3つ目を1にして数字のかたまりを全部横に取り出した画面
エクセルのREGEXEXTRACT関数の3つ目を1にして数字のかたまりを全部横に取り出した画面

A3 の「電話 03-1234-5678 まで」から「03」「1234」「5678」の 3 つが、別々のセルに入りました。

4. 数字だけを残す(REGEXREPLACE)

REGEXREPLACE は、パターンに合う部分を別の文字に置き換えます。[^0-9](数字以外)を空の文字 "" に置き換えると、数字だけが残ります。

=REGEXREPLACE(A2:A7,"[^0-9]","")
エクセルのREGEXREPLACE関数で数字以外を消して数字だけを残した画面
エクセルのREGEXREPLACE関数で数字以外を消して数字だけを残した画面

「TEL:090-9876-5432」は「09098765432」に、「品番 ABC-77 を 3 個」は「773」になりました。離れた数字(77 と 3)もつながってしまうので、数字のかたまりを分けたいときは前の REGEXEXTRACT の返す形 1 を使います。数字の無い「連絡なし」は空欄です。結果は文字列なので、計算に使うときは -- や VALUE で数値にします。ほかの方法は 数字だけ・文字だけを取り出す方法で説明しています。

【実機で検証】REGEX でつまずくところ

エクセルのREGEX関数で大文字小文字や全角数字や見つからないときの結果を確かめた画面
エクセルのREGEX関数で大文字小文字や全角数字や見つからないときの結果を確かめた画面
ためしたこと式結果
大文字・小文字(そのまま)=REGEXTEST("Excel","excel")FALSE
大文字・小文字を区別しない(3 つ目に 1)=REGEXTEST("Excel","excel",1)TRUE
全角の数字は \d に合うか=REGEXTEST("123","\d")TRUE
全角の数字は [0-9] に合うか=REGEXTEST("123","[0-9]")FALSE
見つからないときの REGEXEXTRACT=REGEXEXTRACT("連絡なし","\d+")#N/A
( ) で 2 つに分けて取り出す(返す形 2)=TEXTJOIN("/",,REGEXEXTRACT("A-1023","([A-Z]+)-(\d+)",2))A/1023
2 番目に合う所だけ置き換え=REGEXREPLACE("1-2-3","\d","X",2)1-X-3

REGEX 関数は大文字と小文字を区別します。「Excel」に「excel」を探すと FALSE で、3 つ目に 1 を入れると TRUE になりました。

全角の「123」は \d には合い(TRUE)、[0-9] には合いませんでした(FALSE)。半角の数字だけを探したいときは [0-9] と書きます。全角・半角がまざる表では、先に ASC 関数で半角にそろえると確実です。

見つからないときの REGEXEXTRACT は #N/A になりました。返す形を 2 にすると、( ) で囲んだ部分ごとに取り出せ、「A-1023」は「A/1023」に分かれました。REGEXREPLACE の 4 つ目に 2 を入れると、2 番目に合う所だけが置き換わり「1-X-3」になりました。

よくある質問

REGEX 関数が使えない(#NAME?)ときは?

REGEXTEST・REGEXEXTRACT・REGEXREPLACE は Microsoft 365 の新しい関数です。Excel 2021 以前では使えないので、FIND・MID・SUBSTITUTE を組み合わせます。

「含む」だけなら COUNTIF と何が違う?

決まった文字を含むかだけなら COUNTIF の "*文字*" で十分です。「数字が 4 けた」「英字のあとに数字」のような形で探したいときに REGEX を使います。

. や ( を文字として探すには?

. や ( は正規表現で特別な意味があるので、前に \ を付けて \.・\( と書きます。

練習用Excelファイル(無料ダウンロード)
この記事の例をまとめた練習ファイルです。
Excelファイル(.xlsx)/登録不要/数式・練習データ入り

あわせて読みたい:関連記事

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次