Excelで「文字列に特定のパターンが含まれるか調べたい」「番号だけ取り出したい」「該当部分を別の文字へ置き換えたい」という場合、目的に応じてREGEX関数を選びます。
結論は明確です。判定にはREGEXTEST、抽出にはREGEXEXTRACT、置換にはREGEXREPLACEを使います。いずれもセルに数式を入力して使えるため、VBAマクロを作成する必要はありません。
3つの関数はPCRE2系の正規表現を使用します。VBAのRegExpオブジェクトとは使い方が異なるため、セル関数として完結させたい場合は、今回紹介するREGEX関数を選びましょう。([Microsoft サポート][1])
ExcelのREGEX関数は目的で選ぶ
3つのREGEX関数の違いを整理すると、次のようになります。
| やりたいこと | 選ぶ関数 | 主な戻り値 | 代表的な用途 |
|---|---|---|---|
| パターンが含まれるか確認する | REGEXTEST | TRUEまたはFALSE | 入力チェック、対象行の判定 |
| パターンに一致した文字を取り出す | REGEXEXTRACT | 一致した文字列 | ID、電話番号、コードの抽出 |
| 一致した部分を書き換える | REGEXREPLACE | 置換後の文字列 | マスキング、表記統一、不要文字の削除 |
迷ったときは、次の順番で考えると選びやすくなります。
- 一致しているかどうかだけ知りたいならREGEXTEST
- 一致した文字そのものが必要ならREGEXEXTRACT
- 元の文字列を加工して残したいならREGEXREPLACE
たとえば「注文番号ABC-0123が文章内にあるか確認する」だけならREGEXTESTです。「ABC-0123を取り出す」ならREGEXEXTRACT、「数字部分を伏せ字にする」ならREGEXREPLACEを選びます。
対応環境は関数ごとに確認する
Microsoftの関数ページでは、REGEXTEST、REGEXEXTRACT、REGEXREPLACEの適用先として、Excel for Microsoft 365とExcel for Microsoft 365 for Macが案内されています。
一方、Microsoft公式の対応情報では、REGEXTESTとREGEXREPLACEについてExcel for the webの記載も確認できます。公式ページ間で適用先の表示が異なる時期もあるため、Web版では3関数がすべて同じように使えると決めつけず、実際の数式入力欄に関数名が表示されるか確認するのが確実です。旧買い切り版のExcelについても、同じ関数が利用できるとは限りません。([Microsoft サポート][1])
REGEXTESTで文字列のパターンを判定する
REGEXTESTは、指定した文字列の一部が正規表現に一致するかを調べる関数です。
構文は次のとおりです。
=REGEXTEST(text,pattern,[case_sensitivity])
各引数の役割は次のとおりです。
| 引数 | 内容 |
|---|---|
| text | 判定する文字列またはセル |
| pattern | 判定に使う正規表現 |
| case_sensitivity | 大文字と小文字を区別するかを指定 |
case_sensitivityは、0が大文字と小文字を区別する設定、1が区別しない設定です。省略した場合は区別されます。([Microsoft サポート][1])
数字を一つ以上含むか判定する
A2セルに数字が含まれているか確認する設計例です。
=REGEXTEST(A2,"[0-9]+")
[0-9]は0から9までの数字、+は直前の文字が1回以上続くことを表します。
| A2の値 | 判定結果 |
|---|---|
| 商品ABC | FALSE |
| 商品ABC-120 | TRUE |
| 120 | TRUE |
| A1B2C3 | TRUE |
ここで重要なのは、この式が文字列の一部に数字があるかを判定している点です。
商品ABC-120もA1B2C3も数字を含むため、TRUEになります。文字列全体が数字だけかを判定しているわけではありません。
文字列全体が数字だけか判定する
セル全体を判定したい場合は、文字列の先頭を表す^と、末尾を表す$を付けます。
=REGEXTEST(A2,"^[0-9]+$")
この式では、A2セルが半角数字だけで構成されている場合にTRUEとなります。
| A2の値 | 判定結果 |
|---|---|
| 120 | TRUE |
| A120 | FALSE |
| 120円 | FALSE |
| 12-34 | FALSE |
入力規則のチェックや、CSVから取り込んだデータの形式確認では、部分一致と全体一致を使い分ける必要があります。
商品コードの形式を判定する
「英大文字3文字、ハイフン、数字4桁」というコードを判定する設計例です。
=REGEXTEST(A2,"^[A-Z]{3}-[0-9]{4}$")
この式では、次のように判定されます。
| A2の値 | 判定結果 |
|---|---|
| ABC-1234 | TRUE |
| AB-1234 | FALSE |
| ABC-123 | FALSE |
| abc-1234 | FALSE |
| 商品ABC-1234 | FALSE |
小文字も許可したい場合は、3番目の引数に1を指定します。
=REGEXTEST(A2,"^[A-Z]{3}-[0-9]{4}$",1)
この場合は、大文字と小文字を区別しないため、abc-1234も一致対象になります。
REGEXEXTRACTで一致した文字列を取り出す
REGEXEXTRACTは、正規表現に一致した部分を元の文字列から抽出する関数です。
構文は次のとおりです。
=REGEXEXTRACT(text,pattern,[return_mode],[case_sensitivity])
特に重要なのが、3番目の引数return_modeです。
| return_mode | 返す内容 |
|---|---|
| 0 | 最初に一致した文字列 |
| 1 | 一致したすべての文字列 |
| 2 | 最初の一致に含まれるキャプチャグループ |
省略した場合は0となり、最初に一致した文字列だけを返します。1または2を指定すると複数の結果が配列として返ることがあります。([Microsoft サポート][2])
最初に見つかった数字を抽出する
A2セルから、最初に連続して現れる数字を取り出す設計例です。
=REGEXEXTRACT(A2,"[0-9]+",0)
たとえばA2セルが次の文字列だったとします。
注文番号1234、数量20
この場合、最初に一致する1234が抽出対象です。
return_modeを省略しても同じ動作になります。
=REGEXEXTRACT(A2,"[0-9]+")
一致した数字をすべて抽出する
文字列内にある数字をすべて取り出す場合は、return_modeに1を指定します。
=REGEXEXTRACT(A2,"[0-9]+",1)
A2セルが次の文字列の場合を考えます。
商品12、倉庫3、数量150
抽出対象は12、3、150です。複数の結果は周囲のセルにスピルするため、数式を入力するセルの周辺を空けておく必要があります。
すでに値が入力されているセルがあると、配列を展開できません。表の途中で使う場合は、出力用の列や範囲を先に確保しておきましょう。
キャプチャグループごとに分解する
コードを複数の要素に分けたい場合は、正規表現の丸括弧()でキャプチャグループを作り、return_modeに2を指定します。
A2セルに次のコードが入っているとします。
ORD-2026-0042
設計例は次のとおりです。
=REGEXEXTRACT(A2,"([A-Z]+)-([0-9]{4})-([0-9]+)",2)
この式では、次の3つがキャプチャ対象になります。
ORD20260042
単純にコード全体を取り出すのではなく、種別、年度、連番を別々に扱いたい場合に適しています。
抽出結果は数値に見えてもテキストになる
REGEXEXTRACTの結果は、数字だけを抽出した場合でもテキストとして返されます。Microsoftの公式説明でも、必要に応じてVALUE関数で数値へ変換できることが案内されています。([Microsoft サポート][2])
計算に使う場合は、次のようにVALUE関数を組み合わせます。
=VALUE(REGEXEXTRACT(A2,"[0-9]+"))
ただし、IDや受付番号では安易に数値へ変換しないようにしてください。
たとえば抽出結果が00123だった場合、VALUE関数で数値に変換すると123になります。先頭の0に意味があるデータは、そのままテキストとして扱うのが適切です。
一致しない場合はIFERRORで空欄にする
一致しない行が含まれる表では、IFERRORを組み合わせると扱いやすくなります。
=IFERROR(REGEXEXTRACT(A2,"[0-9]+"),"")
数字が見つかった行では数字を抽出し、見つからない行では空欄を返す設計です。
ただし、空欄だけでは「元のセルが空だったのか」「パターンに一致しなかったのか」を区別できません。確認作業が必要な表では、REGEXTESTによる判定列を別に設けた方が原因を追いやすくなります。
REGEXREPLACEで一致した部分を置換する
REGEXREPLACEは、正規表現に一致した部分を別の文字列へ置き換える関数です。
構文は次のとおりです。
=REGEXREPLACE(text,pattern,replacement,[occurrence],[case_sensitivity])
4番目の引数occurrenceでは、何番目の一致を置換するか指定できます。
| occurrence | 動作 |
|---|---|
| 0または省略 | 一致するすべての箇所を置換 |
| 1 | 最初の一致を置換 |
| 2 | 2番目の一致を置換 |
| -1 | 末尾から数えて最初の一致を置換 |
| -2 | 末尾から数えて2番目の一致を置換 |
既定値は0で、すべての一致箇所が置換されます。負数を指定すると、文字列の末尾側から一致箇所を数えます。([Microsoft サポート][3])
数字を記号に置き換える
A2セル内の連続する数字を#へ置き換える設計例です。
=REGEXREPLACE(A2,"[0-9]+","#")
A2セルが次の文字列だった場合を考えます。
商品12、倉庫3、数量150
置換後は、次の形になります。
商品#、倉庫#、数量#
[0-9]+に一致する数字のまとまりごとに、#へ置換されます。数字1文字ごとに#へ変わるわけではありません。
最初の数字だけ置換する
最初に見つかった数字だけ置き換える場合は、occurrenceに1を指定します。
=REGEXREPLACE(A2,"[0-9]+","#",1)
最後に見つかった数字だけ置き換える場合は、-1を指定します。
=REGEXREPLACE(A2,"[0-9]+","#",-1)
複数の番号を含む文章で、伝票番号だけを伏せたい場合や、末尾の管理番号だけを書き換えたい場合に利用できます。
キャプチャグループを使って形式を変更する
REGEXREPLACEでは、パターン内のキャプチャグループを、置換文字列の$1、$2などで参照できます。
日付の形式を変換する設計例です。
=REGEXREPLACE(A2,"^([0-9]{4})-([0-9]{2})-([0-9]{2})$","$1年$2月$3日")
A2セルが2026-09-12なら、次の形式に変換する想定です。
2026年09月12日
$1は最初の丸括弧、$2は2番目、$3は3番目のキャプチャグループを参照します。Microsoftの公式例でも、キャプチャグループを使った並べ替えが案内されています。([Microsoft サポート][3])
大文字と小文字を区別せずに置換する
REGEXREPLACEで大文字と小文字を区別しない場合は、5番目の引数に1を指定します。
=REGEXREPLACE(A2,"abc","置換済み",0,1)
4番目の引数を0にしているのは、すべての一致箇所を置換しながら、5番目の引数を指定するためです。
ABC、Abc、abcを同じ文字として処理したい場合に利用できます。
判定してから抽出または置換する実務的な流れ
大量のデータを扱う場合は、いきなり抽出や置換を行うのではなく、まずREGEXTESTで対象行を確認すると安全です。
たとえば、A列に次のような文字列が入っているとします。
注文番号はABC-1234です
判定列を作る
B2セルに次の式を入力します。
=REGEXTEST(A2,"[A-Z]{3}-[0-9]{4}")
対象コードを含む行はTRUE、含まない行はFALSEになります。
対象コードを抽出する
C2セルに次の式を入力します。
=IF(B2,REGEXEXTRACT(A2,"[A-Z]{3}-[0-9]{4}"),"")
B2がTRUEの行だけ、コードを抽出します。
判定列と抽出列を分けておくと、「対象外だから空欄なのか」「数式が想定どおり動いていないのか」を確認しやすくなります。
パターンをLET関数で共通化する
同じ正規表現を複数回記述すると、一方だけ修正して不整合が起きることがあります。1つのセル内で完結させる場合は、LET関数でパターンを変数にすると管理しやすくなります。
=LET(
p,"[A-Z]{3}-[0-9]{4}",
IF(REGEXTEST(A2,p),REGEXEXTRACT(A2,p),"")
)
この設計では、正規表現を変更するときにpの定義だけを修正すれば済みます。
複数列で同じパターンを使う場合は、正規表現を専用セルに保存する方法も有効です。たとえばF1セルにパターンを入力し、次のように参照します。
=REGEXTEST(A2,$F$1)
正規表現を数式から分離すると、パターンの確認や修正が容易になります。
よく使う正規表現パターン
ExcelのREGEX関数で使いやすい基本パターンを整理すると、次のようになります。
| パターン | 意味 |
|---|---|
[0-9] | 半角数字1文字 |
[0-9]+ | 半角数字が1文字以上連続 |
^[0-9]+$ | 文字列全体が半角数字 |
[A-Za-z]+ | 半角英字が1文字以上連続 |
[A-Z]{3} | 半角英大文字が3文字 |
[0-9]{4} | 半角数字が4文字 |
^[A-Z]{3}-[0-9]{4}$ | ABC-1234形式 |
[0-90-9]+ | 半角または全角の数字が1文字以上連続 |
\. | ピリオドそのもの |
() | キャプチャグループ |
^ | 文字列の先頭 |
$ | 文字列の末尾 |
[0-9]は半角数字を対象とするパターンです。全角数字も対象にしたい場合は、[0-90-9]のように明示します。
データの入力元がWebフォーム、CSV、コピーした文書など複数に分かれている場合は、半角と全角が混在していないか先に確認しましょう。
REGEX関数で失敗しやすいポイント
部分一致と全体一致を混同する
次の式は、数字がどこかに含まれていればTRUEです。
=REGEXTEST(A2,"[0-9]+")
文字列全体を数字だけに限定する場合は、^と$が必要です。
=REGEXTEST(A2,"^[0-9]+$")
入力値の形式チェックでは、アンカーの付け忘れが特に起きやすい点です。
+と*を取り違える
+は1回以上、*は0回以上を意味します。
[0-9]+
このパターンは数字が1文字以上必要です。
[0-9]*
こちらは数字が0文字でも一致できるため、空文字列に一致して予期しない抽出や置換につながる可能性があります。
「必ず1文字以上必要」という条件では、+を選びましょう。
大文字小文字の指定を逆にする
case_sensitivityは、一般的なTRUE・FALSEの感覚とは異なります。
0は大文字と小文字を区別する1は大文字と小文字を区別しない
1を「区別する」と思い込まないよう注意が必要です。
全一致の抽出先を確保していない
REGEXEXTRACTのreturn_modeに1または2を指定すると、結果が複数セルに展開されることがあります。
数式の周囲に既存データがあるとスピルできません。表の右端に出力列を作るか、別シートへ抽出するなど、展開先を事前に確保します。
抽出したIDを数値に変換してしまう
受付番号、社員番号、商品コードでは、先頭の0もデータの一部です。
00123をVALUE関数で変換すると123になります。計算目的でない限り、REGEXEXTRACTの結果はテキストのまま扱う方が安全です。
元データを残さず置換結果を確定する
REGEXREPLACEを使う場合は、まず隣の列に置換結果を出力します。数件だけでなく、次のようなデータを含めて確認してください。
- パターンに一致する通常データ
- 一致箇所が複数あるデータ
- 一致しないデータ
- 空欄
- 全角文字を含むデータ
- 想定より桁数が多いデータ
結果に問題がないことを確認してから、必要に応じてコピーし、値として貼り付けます。原文列を残しておけば、パターンの指定を間違えた場合でもやり直せます。
まとめ:判定・抽出・置換の目的を先に決める
ExcelのREGEX関数は、正規表現の書き方よりも、最初に処理の目的を整理することが重要です。
- パターンの有無だけ確認するならREGEXTEST
- 一致した文字列が必要ならREGEXEXTRACT
- 一致部分を加工するならREGEXREPLACE
まずREGEXTESTで数件のサンプルを判定し、想定どおりに一致することを確認します。その後、必要に応じてREGEXEXTRACTによる抽出、またはREGEXREPLACEによる置換へ進むと安全です。
特に実務では、正常なデータだけでなく、一致しないデータ、全角文字、空欄、桁数違いも含めて確認してください。数式を大量の行へ展開する前に境界条件を確認することが、正規表現による誤抽出や誤置換を防ぐ最も確実な方法です。
[1]: https://support.microsoft.com/en-us/office/regextest-function-7d38200b-5e5c-4196-b4e6-9bff73afbd31 “REGEXTEST Function | Microsoft Support”
[2]: https://support.microsoft.com/en-us/excel/functions/regexextract-function “REGEXEXTRACT Function | Microsoft Support”
[3]: https://support.microsoft.com/en-us/office/regexreplace-function-9c030bb2-5e47-4efc-bad5-4582d7100897 “REGEXREPLACE Function | Microsoft Support”

コメント