正規表現(Regex)を使ったExcelデータバリデーション

  • これを共有
Michael Brown

このチュートリアルでは、カスタムRegexMatch関数の助けを借りて、正規表現を使用してExcelでデータ検証を行う方法を説明します。

Excelのワークシートでユーザーの入力を制限する場合、データ検証は欠かせません。 特定のセル内の数字や日付だけを許可したり、テキスト値を特定の長さに制限したり、特定の範囲外の時間を許可したり。 問題ありません。これらはすべて、プリセットまたはカスタム検証基準で簡単に実行できます。 しかし、有効な電子メールアドレスだけを許可したい場合、または特定の文字列に一致する文字列を許可したい場合はどうします?特定のパターン? 残念ながら、それは不可能です。 正規表現? うーん...うまくいくかも!

    正規表現によるExcelデータバリデーションの方法

    残念なことに、Excelの内蔵機能は正規表現をサポートしておらず、データ検証も例外ではありません。 正規表現を使ってセルの入力を検証するには、まずカスタムREGEX関数を作成する必要があります。 また、VBAユーザー定義関数はデータ検証に直接提供できないため、名前付き数式の形で仲介者が必要になるのも複雑な点です。

    以上を踏まえて、Excelで正規表現を使ってデータを検証するための手順を簡単に説明します。

    1. 入力値が正規表現に一致するかどうかをチェックするカスタムRegex関数を作成します。
    2. Regexの式の名前を定義します。
    3. 指定された数式に基づいて、データ検証ルールを設定します。
    4. 検証の設定を必要な数だけセルにコピーします。

    そんなことより、実際にやってみましょうよ。

    カスタム正規表現を使用したExcelデータバリデーション

    この例では、非常によくあるケース、つまり、特定のパターンの値のみを許可する方法を扱っています。

    SKUコードをワークシートに保存し、あるパターンにマッチするコードだけがリストに入るようにしたいとします。 各SKUはハイフンで区切られた2つの文字グループからなり、最初のグループには3つの大文字、2番目のグループには3つの数字が含まれているとすると、以下の正規表現を使ってその値を特定することができます。

    パターン : ^[A-Z]{3}-jpd{3}$.

    なお、文字列の先頭(^)と末尾($)はアンカーで固定されているので、パターン以外の文字をセルに入力することはできなかった。

    1.カスタムRegex Match関数の追加

    まず、RegExpMatch関数をワークブックに挿入します。 コードはすでにExcelの達人によって書かれていますので、上記のリンク先のページからコピーして、VBAエディタに貼り付けるだけです。

    参考までに、この関数のシンタックスを紹介します。

    RegExpMatch(テキスト、パターン、[match_case])

    どこで

    • テキスト (必須) - ソースの文字列 (この文脈では、検証済みのセル)。
    • パターン (必須) - 一致させるための正規表現。
    • マッチケース (オプション) - マッチタイプ。 TRUEまたは省略 - 大文字小文字を区別する、FALSE - 大文字小文字を区別しない。

    ヒント:Ultimate Suiteのユーザーであれば、VBAコードを追加することなくExcelで正規表現データ検証を行うことができます。 正規表現ツールに含まれるカスタムAblebitsRegexMatch関数を活用すればいいのです。

    2.名前付き計算式の作成

    目的のワークシートで、セルA1(内容や実際に検証するセルに関係なく)を選択し、Ctrl + F3キーを押してネームマネージャーを開き、この数式の名前を定義します。

    =RegExpMatch(Sheet1!A1, "^[A-Z]{3}-\d{3}$")

    また、あるセル(この例ではA2)に正規表現を入力し、第2引数に$A$2を指定することもできます。

    =RegExpMatch(Sheet1!A1, Sheet1!$A$2)

    この式が正しく動作するためには、必ず相対参照で テキスト の引数(A1)と絶対参照。 雛形 ($A$2).

    この式はSKU番号の検証を目的としているため、このように命名した。 バリデート_SKU .

    重要!数式を定義する際は、必ず 第一引数で現在選択されているセルを参照 例えば、シート上でセル A1 が選択されている場合は、最初の引数に A1 を指定し(推奨)、B2 が選択されている場合は、最初の引数に B2 を指定します。 現在選択されているセルと一致していれば、どの参照を使用してもかまいません。

    手順については、「Excelで名前付き数式を作成する方法」をご覧ください。

    3.データバリデーションの設定

    チェックする最初のセル(ここではA5)を選択し、名前付き数式に基づいたカスタムデータ検証ルールを作成します。 そのためには、次のようにします。

    1. クリック データ tab> データバリデーション .
    2. での 許可する を選択します。 カスタム .
    3. 対応するボックスに以下の数式を入力してください。

      =Validate_SKU

    4. をアンセレクトします。 ブランクを無視する オプションを指定しないと、ルールは機能しません。

    オプションで、セルに無効なデータが入力されたときに表示されるエラーメッセージを入力することができます。

    詳細な手順が必要な場合は、こちらをご覧ください:Excelでカスタムデータ検証を設定する方法。

    4.データ検証をより多くのセルにコピーする

    検証の設定をより多くのセルにコピーするためには、次のようにします。

    1. データ検証のあるセルを選択し、Ctrl + Cキーでコピーします。
    2. 検証したい他のセルを選択し、右クリックし ペースト・スペシャル を選択します。 バリデーション オプションを使用します。
    3. クリック よっしゃー .

    詳しくは、データバリデーションのコピー方法 をご覧ください。

    これで、誰かが有効なセルのいずれかに無効なSKUを入力しようとするたびに、次のような警告メッセージが表示されるようになりました。

    Regexを使ったメール検証

    メール検証を行うには、まずメールアドレスにマッチする正規表現を書くことから始めます。

    パターン : ^[\w\.\-]+@[A-Za-z0-9]+[A-Za-z0-9\.\-]*[A-Za-z0-9]+\.[A-Za-z]{2,24}$

    構文の詳細については、有効な電子メールアドレスにマッチする正規表現をご覧ください。

    そして今度は、すでにおなじみの手順を実行して、検証条件を指定します。

    1. B2に上記の正規表現を入力します。
    2. セルA1を選択し、次のような名前を定義します。 有効な電子メール を指している。

      =RegExpMatch(Sheet1!A1, Sheet1!$B$2)

    3. セル B5 には、以下の数式を使用してカスタムデータ検証を適用します。 ブランクを無視する オプションは非選択にすべきです。

      =Validate_Email

      さらに、有効な電子メールアドレスの入力を促すカスタムエラーメッセージを設定することができます。

    4. このルールを以下のセルにコピーします。

    検証済みのセルに入力した電子メールアドレスが正規表現パターンに一致しない場合、以下のアラートがポップアップ表示されます。

    正規表現によるパスワードの検証

    パスワードの検証に正規表現を使用する場合、最初に決めるべきことは、正規表現が正確に何をチェックするかです。 ここでは、正しい方向に導くための例をいくつか紹介します。

    パスワードは6文字以上で、文字(大文字、小文字)および数字のみ使用できます。

    パターン : ^[A-Za-z0-9]{6,}$となります。

    パスワードは6文字以上で、少なくとも1つの文字と1つの数字を含む必要があります。

    パターン : ^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{6,}$

    パスワードは6文字以上で、少なくとも大文字1文字、小文字1文字、数字1文字を含む必要があります。

    パターン : ^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)[A-Za-z\d]{6,}$

    パスワードは6文字以上で、少なくとも1つの文字、1つの数字、1つの特殊文字を含む必要があります。

    パターン : ^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&_-])[A-Za-z\d@$!%*#?&_-]{6,}$

    パターンが確立されたので、Data Validationの設定に移ることができます。

    1. C2 にパスワード正規表現を入力します。
    2. セル A1 を選択し、次のような名前の数式を作成します。 パスワードの有効化 :

      =RegExpMatch(Sheet1!A1, Sheet1!$C$2)

    3. セルC5には、以下の数式を使用してカスタム検証ルールを作成します。 ブランクを無視する のチェックボックスにチェックを入れます。

      =Validate_Password

    4. ルールを必要な数だけセルにコピーします。

    入力された文字列が正規表現にマッチしない場合、次のようなアラートが表示され、どのような値を受け入れることができるかを確認することができます。

    Regexデータバリデーションが機能しない

    もし、あなたのExcelでRengex Data Validationが機能しない場合、ほとんどの場合、以下の理由のうちの1つが原因だと思われます。

    RegExpMatch関数がない

    データバリデーションを適用する前に、必ずワークブックにRegExpMatch関数のコードを挿入してください。

    不正確な正規表現

    正規表現が期待通りに動作することを確認するには、いくつかのセルに RegExpMatch 式を入力して結果を調べます。 詳細は、Excel 正規表現マッチング(例付き)を参照してください。

    正規表現の解析とデバッグには、RegEx101やRegExrなどの無料のオンライン正規表現テストサービスを利用することができます。

    誤った名前の数式

    データ検証の失敗の原因としてよくあるのが、間違ったセルを参照するREGEX命名の数式です。 すべての例で、A1を参照する数式を定義することを推奨しています。

    =RegExpMatch(A1, regex)

    この機能は、セル A1がアクティブ を定義するときに、名前と 相対参照 ($記号なし)が使用されます。

    これは、数式で指定された相対参照(A1)が、検証したセルの相対位置に基づいて自動的に変更されるというものです。 つまり、セルA1は便宜上、一貫性を保つために選ばれているだけです。 実際には、セルB1を選択してB1を参照したり、セルC1を選択してC1を参照したり、といったことができます。 肝心なのは 参照セル であるべきです。 アクティブセル .

    名前付き数式が正しいかどうかを確認するには、ワークシートの任意のセルを選択して名前マネージャを開き、数式がどのセルを指しているかを確認します。 現在選択されているセルを指していれば、その数式は正しいです。 それ以外の場合は、最初の引数の参照を変更する必要があります。

    下のスクリーンショットでは、セルA7が選択されています。つまり、名前付き数式は最初の引数にA7を指定する必要があります。 第2引数($A$2)は正規表現を参照しています。この参照は一定であることが前提なので、$記号でロックされています。

    空白を無視するオプションが選択されている

    カスタムのデータ検証ルールを設定する場合、そのルールの選択を解除することが重要です。 ブランクを無視する チェックボックスをオンにしないと、次の理由でルールが機能しません。

    一致するものがない場合、RegExpMatch関数はFALSEを返します。 ブランクを無視する オプションが選択されている場合、FALSE はブランクと同じであり、無視される。

    代替案としては、数式がTRUEを返すように明示的に記述することです。

    =RegExpMatch(...)=TRUE

    以上、正規表現を使ったExcelでのData Validationの方法でした。 読んでいただきありがとうございました!来週のブログでお会いできるのを楽しみにしています。

    練習用ワークブック(ダウンロード

    Regex Data Validationの例(.xlsmファイル)

    Michael Brown は、ソフトウェア ツールを使用して複雑なプロセスを簡素化することに情熱を注ぐ熱心なテクノロジー愛好家です。テクノロジー業界で 10 年以上の経験があり、Microsoft Excel と Outlook、さらに Google Sheets と Docs のスキルを磨いてきました。 Michael のブログは、彼の知識と専門知識を他の人と共有することに特化しており、生産性と効率を向上させるためのわかりやすいヒントとチュートリアルを提供しています。経験豊富なプロフェッショナルであろうと初心者であろうと、Michael のブログでは、これらの重要なソフトウェア ツールを最大限に活用するための貴重な洞察と実践的なアドバイスを提供しています。