こんな悩みに回答します。
非表示にできる< 目次 >
こんな悩みの人向け
こんな悩みの人向け
- 正規表現により半角英数字をチェックしたい人
これをやりたい人には様々な理由があると思います。
例えば、EXCELを入力フォーマットとして利用していた場合、後続処理の関係で、入力値が正しいかどうかを自動で確定させたい・・・など。
正規表現は奥が深いので、今回は「半角英数字」に絞っておりますゆえ、お許しください。
-
【説明】VBEで作成したVBAコードの実行方法【EXCEL VBA】
続きを見る
-
【解説付】マクロ・VBE・VBAの違いの説明【EXCEL VBA】
続きを見る
ということで、説明となります。
コードの紹介(結論)※コピペでOK
コードは至ってシンプルで、以下の通り。
Functionの方が、使い勝手が良いので、Functionで記載しております。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
'*********************************************** '正規表現による半角英数字チェック ' <チェック項目> ' 半角英数値で入力してあること '*********************************************** Public Function chk_hankakueisuzi(InputStr As String) As Boolean Dim objReg As Object Set objReg = CreateObject("VBScript.RegExp") objReg.IgnoreCase = True '大文字と小文字の区別をしない objReg.Pattern = "^[a-zA-Z0-9]+$" chk_hankakueisuzi = objReg.Test(InputStr) '英数字がある場合は True、ない場合は False が戻る Set objReg = Nothing End Function |
重要なポイント
- このFunctionは Boolean型で返り値(True/False)が出力されます。
- 「英数字だけで構成されている場合は True、そうでない場合は False 」が戻る仕様となっています。
実行したいSub~End Sub の間に「chk_hankakueisuzi(対象文字列)」 と記入すれば、True/Falseが判明します。
検証用のテストコード
簡単ですが、検証用のテストコードを紹介しますね。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
Public Sub 正規表現_動作確認() Dim Str1 As String Dim Str2 As String Dim Str3 As String Dim Str4 As String Dim Str5 As String Dim Str6 As String Dim Str7 As String Dim Str8 As String Dim Str9 As String Str1 = "a" '半角英字のみ (結果:True) Str2 = "123" '半角数字のみ (結果:True) Str3 = "a123" '半角英字+数字 (結果:True) Str4 = "日本語" '日本語 (結果:False) Str5 = "a123日本語" '半角英数字+日本語(結果:False) Str6 = "A" '全角英字 (結果:False) Str7 = "123" '全角数字 (結果:False) Str8 = "A123日本語" '全角英数字+日本語(結果:False) Debug.Print "①半角英字のみ:"; chk_hankakueisuzi(Str1) Debug.Print "②半角数字のみ:"; chk_hankakueisuzi(Str2) Debug.Print "③半角英字+数字:"; chk_hankakueisuzi(Str3) Debug.Print "④日本語:"; chk_hankakueisuzi(Str4) Debug.Print "⑤半角英数字+日本語:"; chk_hankakueisuzi(Str5) Debug.Print "⑥全角英字:"; chk_hankakueisuzi(Str6) Debug.Print "⑦全角数字:"; chk_hankakueisuzi(Str7) Debug.Print "⑧半角英数字+日本語:"; chk_hankakueisuzi(Str8) End Sub |
検証するのが面倒な人向けに、検証用コードの出力結果をキャプチャを貼っておきます。
余談:RegExp のちょっとした解説
RegExpとは
紹介コードに「Set objReg = CreateObject("VBScript.RegExp")」というのがあったと思います。
この「RegExp」は「Regular Expressions(意味:正規表現)」の略となります。
で、「CreateObject("VBScript.〇〇")」は、このRegExpを使用する際の構文となります。
つまり、雑な言い方ですが、「RegExp」を使って、正規表現チェックしまっせー、の意味になります。
RegExpについて
RegExpについて、プロパティ 及び メソッド は以下の通り。
プロパティ | 説明 |
Global | 検索文字列全体にを検索する(True)か、最初の一致を検索する(既定値:False)のかを設定 |
Pattern | 検索時のパターンを設定 |
IgnoreCase | 検索時に大文字と小文字を区別する(既定値:False)か、区別しない(True)かの設定値 |
※青文字:本記事紹介コードで利用しているもの
メソッド | 説明 |
Execute | objReg.Execute(string) 指定された文字列を正規表現で検索。 見つかった文字列毎に存在するMatchオブジェクトを含むMatchesコレクションを返す。 |
Replace | objReg.Replace(string1, string2) 検索されたstring1→string2へ文字列を置換 |
Test | objReg.Test(string) パターンに一致する文字列が検索された場合、Trueを返します。 見つからない場合、Falseを返す。 |
※青文字:本記事紹介コードで利用しているもの
ここまで読んだところで、本記事で紹介しているコード(同じ)を再度 見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
'*********************************************** '正規表現による半角英数字チェック ' <チェック項目> ' 半角英数値で入力してあること '*********************************************** Public Function chk_hankakueisuzi(InputStr As String) As Boolean Dim objReg As Object Set objReg = CreateObject("VBScript.RegExp") objReg.IgnoreCase = True '大文字と小文字の区別をしない objReg.Pattern = "^[a-zA-Z0-9]+$" chk_hankakueisuzi = objReg.Test(InputStr) '英数字がある場合は True、ない場合は False が戻る Set objReg = Nothing End Function |
先ほどよりは、「何をしているか」を理解できると思います。
終わりに
お疲れさまでした。
今回 紹介した正規表現ですが、結構 奥深い分野だと個人的には思っています。
ただ こういった正規表現は、VBAに限らず、その他言語でも多用する「実用的」な方法となります。
まぁこの辺は、実際に その場面が訪れた時に 勉強すればいいので この辺で。(もちろん、暗記は不要ですよー。)
ということで、今回はここまでとなります。
ここまでご覧いただき、ありがとうございました。
---終わり---