スプレッドシートでデータの入力チェックをしたいことはありませんか?「メールアドレスの形式になっているか」「電話番号が正しいパターンか」を確認したい場面は多いですよね。SEARCH関数やFIND関数では単純な文字検索しかできません。複雑なパターンには対応しきれないのが現実です。
REGEXMATCH関数を使えば、正規表現で文字列のパターンを判定できます。この記事ではREGEXMATCH関数の基本から実務パターンまで丁寧に解説します。REGEXEXTRACT・REGEXREPLACEとの使い分けもカバーしますね。
REGEXMATCH関数とは?正規表現でパターン判定する関数
REGEXMATCH関数は、セルの文字列が指定した正規表現パターンに一致するかをTRUE/FALSEで返す関数です。読み方は「レジェックスマッチ」。「Regex(正規表現)」+「Match(一致)」が語源です。
たとえば「tanaka@example.com」というセルに対して、メールアドレスのパターンで検索すればTRUEが返ります。「tanaka」のように@がない文字列ならFALSEです。
REGEXMATCH関数はGoogleスプレッドシート独自の関数で、Excelには存在しません。Excelで同じことをするにはVBAが必要です。スプレッドシートなら関数だけで正規表現が使えるのが大きな強みですよ。
「正規表現」って何?
正規表現とは、文字列のパターンを記号で表すルールです。たとえば [0-9]+ は「1文字以上の数字」を意味します。最初はとっつきにくく感じるかもしれません。でも、よく使うパターンは決まっています。この記事で紹介するパターンをコピーして使えばOKです。
REGEXMATCH関数の書き方(構文と引数)
基本構文
=REGEXMATCH(テキスト, 正規表現)
| 引数 | 必須/省略可 | 説明 |
|---|---|---|
| テキスト | 必須 | 判定したい文字列またはセル参照 |
| 正規表現 | 必須 | 判定に使う正規表現パターン |
戻り値はTRUEまたはFALSEです。テキストの中にパターンと一致する部分が1箇所でもあればTRUEを返します。なければFALSEです。
正規表現の基本記号
REGEXMATCH関数で使う正規表現の記号を押さえておきましょう。
| 記号 | 意味 | 例 | マッチする文字列 | ||
|---|---|---|---|---|---|
. | 任意の1文字 | a.c | abc, aXc, a1c | ||
* | 直前の文字が0回以上 | ab*c | ac, abc, abbc | ||
+ | 直前の文字が1回以上 | ab+c | abc, abbc(acは不可) | ||
? | 直前の文字が0回か1回 | ab?c | ac, abc | ||
^ | 文字列の先頭 | ^東京 | 東京都、東京タワー | ||
$ | 文字列の末尾 | .com$ | example.com | ||
[abc] | いずれか1文字 | [abc] | a, b, c | ||
[0-9] | 数字1文字 | [0-9]+ | 123, 45 | ||
[a-zA-Z] | 英字1文字 | [a-zA-Z]+ | Hello, abc | ||
d | 数字([0-9]と同じ) | d{3} | 123, 456 | ||
{n} | ちょうどn回 | d{3} | 123(12は不可) | ||
{n,m} | n回以上m回以下 | d{2,4} | 12, 123, 1234 | ||
| ` | ` | または | `東京 | 大阪` | 東京、大阪 |
() | グループ化 | (ab)+ | ab, abab |
ピリオド . やプラス + など、正規表現で特別な意味を持つ文字があります。これらをそのまま検索したい場合は、前にバックスラッシュ を付けてください。たとえばピリオドそのものを探すなら . と書きます。
基本的な使い方
特定の文字列が含まれるかを判定する
セルA2に「東京都渋谷区」が入っているとします。
=REGEXMATCH(A2, "東京") → TRUE(「東京」が含まれる)
=REGEXMATCH(A2, "大阪") → FALSE(「大阪」は含まれない)
=REGEXMATCH(A2, "渋谷|新宿") → TRUE(「渋谷」が含まれる)
単純な文字列検索ならSEARCH関数でもできます。REGEXMATCH関数の真価は、次のようなパターン検索にあります。
数字が含まれるかを判定する
セルA2に「ABC-123」が入っているとします。
=REGEXMATCH(A2, "[0-9]") → TRUE(数字が含まれる)
=REGEXMATCH(A2, "^[0-9]+$") → FALSE(全体が数字ではない)
[0-9] は「数字が1文字でもあるか」の判定です。^[0-9]+$ にすると「すべて数字か」の判定になります。^(先頭)と $(末尾)で全体を囲むのがポイントですよ。
大文字・小文字を区別せずに判定する
REGEXMATCH関数はデフォルトで大文字と小文字を区別します。区別せずに判定したいときは (?i) を先頭に付けます。
=REGEXMATCH(A2, "tokyo") → FALSE(小文字のtokyoは不一致)
=REGEXMATCH(A2, "(?i)tokyo") → TRUE(大文字小文字を無視してマッチ)
(?i) は「case-insensitive(大文字小文字を無視)」のフラグです。英語データを扱うときに便利ですね。
実務で使えるパターン集
メールアドレスの形式チェック
入力されたデータがメールアドレスの形式になっているかを判定します。
=REGEXMATCH(A2, "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$")
この正規表現は「英数字@英数字.英字2文字以上」のパターンです。完璧な検証ではありませんが、入力ミスの検出には十分使えます。
| セルの値 | 結果 | 理由 |
|---|---|---|
| tanaka@example.com | TRUE | 正しい形式 |
| tanaka@example | FALSE | ドメインにピリオドがない |
| tanaka.example.com | FALSE | @がない |
| @example.com | FALSE | ローカル部分がない |
電話番号の形式チェック
日本の電話番号パターン(ハイフンあり・なし両対応)を判定します。
=REGEXMATCH(A2, "^0d{1,4}-?d{1,4}-?d{3,4}$")
| セルの値 | 結果 | 理由 |
|---|---|---|
| 03-1234-5678 | TRUE | 固定電話(ハイフンあり) |
| 09012345678 | TRUE | 携帯電話(ハイフンなし) |
| 090-1234-5678 | TRUE | 携帯電話(ハイフンあり) |
| 1234-5678 | FALSE | 先頭が0でない |
郵便番号の形式チェック
「123-4567」または「1234567」の形式を判定します。
=REGEXMATCH(A2, "^d{3}-?d{4}$")
-? は「ハイフンが0回か1回」を意味します。ハイフンあり・なしの両方に対応できるのが便利ですね。
IF関数と組み合わせてラベルを付ける
REGEXMATCH関数はTRUE/FALSEを返します。IF関数と組み合わせれば条件分岐に使えます。
=IF(REGEXMATCH(A2, "@"), "メールアドレス", "その他")
FILTER関数と組み合わせれば、パターンに合致する行だけの抽出も可能です。
=FILTER(A2:B10, REGEXMATCH(A2:A10, "東京|大阪"))
この数式は、A列に「東京」または「大阪」を含む行だけをA:B列から抽出します。
よくあるエラーと対処法
| エラー | 原因 | 対処法 |
|---|---|---|
| #VALUE! | テキストが数値 | =REGEXMATCH(TEXT(A2,"0"), "パターン") で文字列に変換 |
| #VALUE! | テキストが空セル | =IF(A2="", FALSE, REGEXMATCH(A2, "パターン")) で空チェック |
| #REF! | 正規表現の構文エラー | 括弧の閉じ忘れ・エスケープ漏れを確認 |
| 期待と逆の結果 | 部分一致と完全一致の混同 | 完全一致なら ^パターン$ で囲む |
数値セルで#VALUE!エラーになるケース
REGEXMATCH関数の第1引数は文字列が必要です。セルに数値が入っている場合は#VALUE!エラーになります。
=REGEXMATCH(A2, "d+") → A2が数値だと #VALUE!
=REGEXMATCH(TEXT(A2, "0"), "d+") → TEXT関数で文字列に変換すればOK
数値にパターン判定をしたい場合は、TEXT関数で文字列に変換してから渡しましょう。
正規表現の特殊文字をエスケープし忘れるケース
ピリオド .、括弧 ()、プラス + などは正規表現の特殊文字です。これらの文字そのものを検索したい場合は でエスケープしてください。
=REGEXMATCH(A2, ".") → 任意の1文字にマッチ(ほぼ常にTRUE)
=REGEXMATCH(A2, ".") → ピリオドそのものにマッチ
REGEXEXTRACT・REGEXREPLACEとの使い分け
スプレッドシートには正規表現を使う関数が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と覚えておきましょう。
SEARCH・FIND関数との違い
SEARCH関数やFIND関数でも文字列検索はできます。REGEXMATCH関数との違いを整理しましょう。
| 比較項目 | REGEXMATCH | SEARCH | FIND |
|---|---|---|---|
| 戻り値 | TRUE/FALSE | 文字位置(数値) | 文字位置(数値) |
| 正規表現 | 使える | 使えない | 使えない |
| ワイルドカード | 不要(正規表現で代替) | * ? が使える | 使えない |
| 大文字小文字 | 区別する((?i) で無視可) | 区別しない | 区別する |
| 不一致時 | FALSE | #VALUE!エラー | #VALUE!エラー |
| Excel互換 | なし(Sheets独自) | あり | あり |
どれを使うべき?
- 単純な文字検索(「東京」が含まれるか)→ SEARCH関数 + ISNUMBER で十分
- パターン検索(「数字3桁-数字4桁」の形式か)→ REGEXMATCH関数一択
- 大文字小文字を厳密に区別した検索 → FIND関数
正規表現が使えるかどうかが最大の違いです。「特定の文字があるか」だけならSEARCH/FINDで十分です。「パターンに合致するか」を判定したいならREGEXMATCH関数を選びましょう。
まとめ
REGEXMATCH関数は、正規表現でパターン判定ができるスプレッドシート独自の関数です。
- 基本:
=REGEXMATCH(テキスト, 正規表現)でTRUE/FALSEを返す - 実務活用: メールアドレス・電話番号・郵便番号の入力チェックに最適
- 使い分け: 判定はREGEXMATCH、抽出はREGEXEXTRACT、置換はREGEXREPLACE
- 注意点: 数値セルはTEXT関数で文字列に変換してから渡す
SEARCH/FIND関数では対応できないパターン判定が必要なとき、ぜひ活用してみてください。正規表現は最初はとっつきにくいかもしれません。でも、この記事のパターンをコピーして使うだけでも業務効率がぐっと上がりますよ。
