スプレッドシートのREGEXMATCH関数の使い方|正規表現でパターン判定

スポンサーリンク

スプレッドシートでデータの入力チェックをしたいことはありませんか?「メールアドレスの形式になっているか」「電話番号が正しいパターンか」を確認したい場面は多いですよね。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.cabc, aXc, a1c
*直前の文字が0回以上ab*cac, abc, abbc
+直前の文字が1回以上ab+cabc, abbc(acは不可)
?直前の文字が0回か1回ab?cac, 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.comTRUE正しい形式
tanaka@exampleFALSEドメインにピリオドがない
tanaka.example.comFALSE@がない
@example.comFALSEローカル部分がない

電話番号の形式チェック

日本の電話番号パターン(ハイフンあり・なし両対応)を判定します。

=REGEXMATCH(A2, "^0d{1,4}-?d{1,4}-?d{3,4}$")
セルの値結果理由
03-1234-5678TRUE固定電話(ハイフンあり)
09012345678TRUE携帯電話(ハイフンなし)
090-1234-5678TRUE携帯電話(ハイフンあり)
1234-5678FALSE先頭が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関数との違いを整理しましょう。

比較項目REGEXMATCHSEARCHFIND
戻り値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関数では対応できないパターン判定が必要なとき、ぜひ活用してみてください。正規表現は最初はとっつきにくいかもしれません。でも、この記事のパターンをコピーして使うだけでも業務効率がぐっと上がりますよ。

タイトルとURLをコピーしました