「このセルに入っている文字列、メールアドレスとして正しい形式かな?」「電話番号の列に変な文字が混じっていないかチェックしたい」。データの入力チェックをしていると、こんな場面によく出くわしますよね。
これまでのExcelでは、ISNUMBERやSEARCH関数を組み合わせたり、長い条件式を書いたりするしかありませんでした。かなり面倒ですよね。
そんなときに便利なのがREGEXTEST関数です。正規表現を使って、セルの文字列が特定のパターンに一致するかを一発でチェックできます。
この記事では、ExcelのREGEXTEST関数の使い方を基本から実務例まで解説します。正規表現の早見表や姉妹関数との使い分けもまとめましたので、ぜひ参考にしてください。
ExcelのREGEXTEST関数とは?
REGEXTEST関数は、セルの文字列が指定した正規表現パターンに一致するかを判定するExcelの関数です。読み方は「レジェックステスト」で、結果は TRUE または FALSE で返ります。
2024年にMicrosoft 365へ追加された比較的新しい関数で、REGEXEXTRACT・REGEXREPLACEと合わせて「正規表現3関数」と呼ばれています。
正規表現というと難しそうに感じますが、使うパターンは意外と限られています。この記事のサンプルをコピーすれば、実務で十分使えますよ。
どんなときに使う関数か
REGEXTEST関数は次のようなシーンで活躍します。
- メールアドレスが正しい形式で入力されているかチェックしたいとき
- 電話番号や郵便番号が数字のみか確認したいとき
- セルに特定のキーワードや文字パターンが含まれるか判定したいとき
- FILTER関数と組み合わせて条件に合う行だけ抽出したいとき
従来のISNUMBER+SEARCH構文と比べて、数式が圧倒的にスッキリしますよ。
利用条件(Microsoft 365が必須)
REGEXTEST関数を使うには、Microsoft 365のサブスクリプションが必要です。Excel 2019やExcel 2021などの永続ライセンス版では使えません。
対応環境は次のとおりです。
- Excel for Microsoft 365(Windows / Mac)
- Excel for the web
お使いのバージョンが対応しているか、事前に確認しておきましょう。バージョンが古いと #NAME? エラーになってしまいます。
REGEXTEST関数の構文と引数
基本構文
=REGEXTEST(テキスト, 正規表現パターン, [大文字小文字の区別])
カッコ内に、チェックしたいテキストと正規表現パターンを指定します。第3引数は省略可能です。
第1引数:テキスト
チェック対象の文字列またはセル参照を指定します。
=REGEXTEST("abc123", "[0-9]")
=REGEXTEST(A2, "[0-9]")
直接文字列を入れる場合はダブルクォーテーションで囲みます。実務ではセル参照を使うのが一般的です。
なお、セルが数値型の場合はそのままでは使えません。TEXT関数(数値を指定した書式の文字列に変換する関数)で文字列化してから渡しましょう。
第2引数:正規表現パターン
マッチさせたい正規表現をダブルクォーテーションで囲んで指定します。
=REGEXTEST(A2, "^[0-9]+$")
上の例は「A2が数字だけで構成されているか」をチェックする数式です。記号の意味は後ほど早見表で整理します。
第3引数:大文字小文字の区別
大文字と小文字を区別するかを数値で指定します。省略すると0(区別する)が使われます。
- 0(省略時):大文字と小文字を区別する
- 1:大文字と小文字を区別しない
英字を含むパターンを使うときだけ気にすれば大丈夫ですよ。
=REGEXTEST("ABC", "[a-z]") 'FALSE(小文字のみにマッチ)
=REGEXTEST("ABC", "[a-z]", 1) 'TRUE(区別しないのでマッチ)
正規表現の基本パターン早見表
REGEXTEST関数で使える正規表現は、PCRE2(Perl互換の正規表現)と呼ばれるものです。まずはよく使う記号だけ押さえておけば十分です。
文字クラス
| 記号 | 意味 | 例 |
|---|---|---|
d | 数字1文字(0〜9) | dd は「12」にマッチ |
D | 数字以外の1文字 | D は「a」にマッチ |
w | 英数字またはアンダースコア | w+ は「hello_1」にマッチ |
s | 空白文字(半角スペース・タブ) | s は半角スペースにマッチ |
. | 任意の1文字 | a.c は「abc」「a1c」にマッチ |
[abc] | a・b・cのいずれか1文字 | [abc] は「a」にマッチ |
[a-z] | a〜zのいずれか1文字 | 小文字の英字にマッチ |
[0-9] | 0〜9のいずれか1文字 | d と同じ |
[^0-9] | 0〜9以外の1文字 | 数字以外にマッチ |
位置と繰り返し
| 記号 | 意味 | 例 | ||
|---|---|---|---|---|
^ | 文字列の先頭 | ^abc は「abc」で始まる文字列 | ||
$ | 文字列の末尾 | xyz$ は「xyz」で終わる文字列 | ||
* | 直前の0回以上の繰り返し | a* は「」「a」「aaa」にマッチ | ||
+ | 直前の1回以上の繰り返し | a+ は「a」「aaa」にマッチ | ||
? | 直前の0回または1回 | colou?r は「color」「colour」 | ||
{n} | 直前のn回の繰り返し | d{4} は数字4桁 | ||
{n,m} | 直前のn回以上m回以下 | d{3,5} は数字3〜5桁 | ||
| ` | ` | または | `cat | dog` は「cat」か「dog」 |
TIP
特殊記号そのものを検索したいときは
でエスケープします。たとえば「.」をそのままチェックしたいなら.と書きます。
^ と $ を両方付けると「文字列全体が完全一致するか」をチェックできます。部分一致でよいなら両方とも省略しましょう。
Excel REGEXTEST関数の基本的な使い方
それでは実際に数式を組み立ててみましょう。
文字列に数字が含まれるかチェックする
もっともシンプルな例です。A列の文字列に数字が1文字でも含まれるかを判定します。
=REGEXTEST(A2, "d")
「abc」ならFALSE、「abc123」ならTRUEが返ります。d は「数字1文字」を表す記号です。
数字のみで構成されているかチェックする
文字列全体が数字だけでできているかを判定します。郵便番号や電話番号の入力チェックに便利です。
=REGEXTEST(A2, "^d+$")
^ と $ で文字列全体を挟み、d+ で「数字1文字以上の繰り返し」を表しています。「123456」ならTRUE、「123-456」はハイフンが含まれるのでFALSEになります。
大文字のアルファベットが含まれるかチェックする
パスワードチェックなどで使うパターンです。
=REGEXTEST(A2, "[A-Z]")
A2に「password」が入っていればFALSE、「Password」ならTRUEです。大文字が1文字でもあればTRUEを返します。
IF関数と組み合わせて判定結果を表示する
TRUE・FALSEだけだとわかりにくいので、IF関数と組み合わせてメッセージで返すのがおすすめです。
=IF(REGEXTEST(A2, "^d+$"), "数字のみ", "数字以外を含む")
見た目もわかりやすくなり、チェック結果の確認がラクになりますよ。
実践的な使い方・応用例
メールアドレスの形式をチェックする
顧客リストや問い合わせフォームのデータで、メールアドレスが正しい形式かをチェックする例です。
=REGEXTEST(A2, "^[w.+-]+@[w-]+.[w.-]+$")
一見複雑ですが、分解すると次のような意味になります。
^[w.+-]+:先頭は英数字・ドット・プラス・ハイフンの1文字以上@:アットマーク[w-]+:ドメイン名部分(英数字とハイフン).[w.-]+$:ドット+トップレベルドメインで終わる
| A列(入力値) | B列(=REGEXTESTの結果) |
|---|---|
| taro@example.com | TRUE |
| hanako.suzuki@biz-tactics.co.jp | TRUE |
| info@example | FALSE |
| taro[at]example.com | FALSE |
厳密なRFC準拠ではありませんが、実務レベルのチェックには十分です。IF関数と組み合わせて「要確認」のラベルを付けておくと、修正漏れを防げますよ。
電話番号が数字とハイフンのみか確認する
電話番号欄に余計な文字(全角やスペース)が入っていないかチェックする例です。
=REGEXTEST(A2, "^[0-9-]+$")
「03-1234-5678」はTRUE、「03-1234-5678(内線1)」は括弧が含まれるのでFALSEになります。
ハイフンなしの数字のみに統一したい場合は次の数式を使います。
=REGEXTEST(A2, "^d{10,11}$")
d{10,11} は「数字10桁〜11桁」を意味します。携帯番号(11桁)と固定電話(10桁)の両方に対応できます。
郵便番号の形式をチェックする
日本の郵便番号(7桁、ハイフン区切り)のチェックです。
=REGEXTEST(A2, "^d{3}-d{4}$")
「100-0001」はTRUE、「1000001」や「100-001」はFALSEになります。ハイフンの位置までしっかりチェックできるのがポイントです。
セルに特定キーワードが含まれるか判定する
複数のキーワードのいずれかが含まれるかを判定する例です。「緊急」「至急」「重要」のどれかが本文に含まれるメールを検出するイメージです。
=REGEXTEST(A2, "緊急|至急|重要")
|(パイプ)は「または」を意味します。IF関数と組み合わせれば、優先度の自動仕分けにも使えますよ。
=IF(REGEXTEST(A2, "緊急|至急|重要"), "優先対応", "")
FILTER関数と組み合わせて条件抽出する
REGEXTEST関数のすごいところは、FILTER関数と組み合わせて行単位の抽出ができる点です。
A2:B100のデータから、A列が「東京」で始まる行だけを抽出する例です。
=FILTER(A2:B100, REGEXTEST(A2:A100, "^東京"))
スピル(数式が自動で配列に展開される機能)に対応しているので、1つの数式で複数行を一気に絞り込めます。「東京都」「東京支店」などを一括で拾えますよ。
よくあるエラーと対処法
REGEXTEST関数で表示されるエラーと対処法をまとめました。
#VALUE! エラー
原因: 第2引数に無効な正規表現を指定した。または第1引数に数値や日付などの非文字列を直接渡した。
対処法: 正規表現パターンを見直しましょう。特にエスケープ忘れ(( をそのまま使うなど)が多いので注意してください。数値セルを渡す場合はTEXT関数で文字列化しましょう。
=REGEXTEST(TEXT(A2, "0"), "^d+$")
#NAME? エラー
原因: REGEXTEST関数に対応していないバージョンのExcelで使っている。または関数名のスペルミス。
対処法: Microsoft 365のサブスクリプションで最新版にアップデートしてください。Excel 2019・2021・LTSC 2024などでは使えません。関数名のスペルも確認しましょう。
意図したとおりにマッチしない
原因: 日付セルが対象になっている。日付はExcel内部ではシリアル値(数値)として扱われるため、表示形式とは異なる値が渡されます。
対処法: TEXT関数で文字列化してから渡します。
=REGEXTEST(TEXT(A2, "yyyy/mm/dd"), "^2026")
| エラー | 原因 | 対処法 |
|---|---|---|
| #VALUE! | 無効な正規表現・非文字列 | パターン見直し・TEXTで変換 |
| #NAME? | 非対応バージョン | Microsoft 365に更新 |
| 意図しないFALSE | 日付シリアル値が対象 | TEXT関数で文字列化 |
エラーが出ても原因は限られているので、落ち着いて確認すれば大丈夫ですよ。
REGEXEXTRACT・REGEXREPLACEとの使い分け
REGEXTEST関数には2つの姉妹関数があります。用途が異なるので、目的に合わせて使い分けましょう。
| 関数 | 戻り値 | 用途 |
|---|---|---|
| REGEXTEST | TRUE / FALSE | パターンに一致するかを判定する |
| REGEXEXTRACT | 一致した文字列 | パターンに一致する部分を抜き出す |
| REGEXREPLACE | 置換後の文字列 | パターンに一致する部分を別の文字列に置き換える |
使い分けのイメージは次のとおりです。
- 「メールアドレスとして正しいか?」→ REGEXTEST
- 「本文からメールアドレスだけ抜き出したい」→ REGEXEXTRACT
- 「電話番号のハイフンを削除したい」→ REGEXREPLACE
3つとも同じPCRE2の正規表現を使うので、パターンの書き方は共通です。REGEXTESTで覚えた知識はそのまま他の2関数でも活きますよ。
まとめ
REGEXTEST関数は、Excelのセル上で正規表現を使ったパターンチェックができる関数です。
この記事のポイントを整理します。
- 構文は
=REGEXTEST(テキスト, 正規表現パターン, [大文字小文字の区別]) - Microsoft 365のサブスクリプションが必要
- 戻り値はTRUE / FALSEのシンプルな形
- 第3引数を1にすると大文字小文字を区別しない
- 正規表現は
d(数字)^$(先頭・末尾)あたりから覚えるのがおすすめ - メールアドレス・電話番号・郵便番号の形式チェックに便利
- FILTER関数と組み合わせると条件抽出にも使える
- 姉妹関数にREGEXEXTRACT(抽出)とREGEXREPLACE(置換)がある
まずは =REGEXTEST("123abc", "d") のようなシンプルな式から試してみてください。データクレンジングや入力チェックの作業がぐっとラクになりますよ。
