プログラミングと動作確認までは、前回の「Step40・正規表現でメールアドレスをチェック」で行なっています。まだの方は、先にご覧ください。
正規表現を使うと、メールアドレスが有効か、チェックすることができます。
正規表現は、文字列のパターンをマッチングする時によく使われます。複雑な条件で検索したり、処理できるのが、凄いところです。
正規表現を使いこなせるようになると、文字列を処理するプログラムの幅が大きく広がるので、プログラミングが上達します。
今回のプログラムは、できるだけ BASP21 の解説にしたがって作ってあるので、多少冗長化しているところもあります。
(1)変数を宣言している部分です。
Dim match As Integer
Dim target As String
Dim regstr As String
・matchは、matchメソッドの結果を受け取るための変数で、0か1が代入されます。
・targetは、処理の対象となる文字列(メールアドレス)を代入します。
・regstrは、正規表現を表す文字列を代入します。
(2)正規表現を代入している部分です。
regstr = "/^[\w\-+\.]+\@[\w\-+\.]+$/i"
*「\」はWindowsでは円記号のことです。
メールアドレスの正規表現については、書き方がいろいろ提案されています。今回参考にさせていだだいたのは、以下のWebサイトです。
・Perl5 で CGI! - 正規表現
(3)行番号を指定した範囲を繰り返している部分です。
For i = startPos To endPos
省略
Next i
「For Next ステートメント」は、繰り返し処理を行なう制御文です。
変数 i が startPos から endPos になるまで、中に書いた処理を繰り返します。
それでは、「For Next ステートメント」の内側を見てみましょう。
(4)ワークシートのB列から、1件ずつメールアドレスを取得している部分です。
eMail = Trim(Range("B" & i).Value)
iはカウントアップされていきます。
(5)変数targetに、メールアドレスを代入している部分です。
target = eMail
これはBASP21の解説と同じ引数にするためです。必ずしもこの方法を使う必要はありません。
(6)正規表現文字列を使って、メールアドレスがマッチするか、調べている部分です。
match = bobj.match(regstr, target)
matchメソッドは、引数で指定した条件がマッチするか調べて、その結果を返します。
マッチする場合は「1」を、マッチしない場合は「0」が、変数matchに代入されます。
つまり、メールアドレスとして正しい表現なら「1」、間違っている場合は「0」ということです。
ちなみに、以下のように変数eMailを、直接指定しても同じ結果です。
match = bobj.match(regstr, eMail)
(7)もしメールアドレスが間違っている場合は、メッセージを表示して、メールが送信できないようにし、プログラムを終了しています。
If match = 0 Then
Me.lblMsg = "行番号" & i & "のメールアドレスが正しくありません。"
'メール送信ボタン使用不可
Me.cmd送信.Enabled = False
Exit Sub
End If
【解説】
正規表現の部分について詳しく解説します。
regstr = "/^[\w\-+\.]+\@[\w\-+\.]+$/i"
*「\」はWindowsでは円記号のことです。
正規表現は文字列なので、「"」(ダブルクォーテーション)で囲っています。
またBASP21では、最初の文字は「/」か「m」を指定することに決まっています。
したがって実際の正規表現部分は、「/~/」の間です。
iはフラグといい、「大文字と小文字を区別しない」という意味があります。
正規表現は難しいので、要点だけ書いておきます。
・ ^ その後に続く文字列で始まる
・ [ ]いずれかの1文字 例 [ABC]
・ - 範囲を示す 例 A-Z a-z 0-9
・ \ この後に続く文字は、特別な意味がある
・ \w 英数文字
・ + 一文字以上の繰り返し
・ . 任意の一文字 ただし「\.」だと「.」ドットという文字自身を表す
・ $ その前の文字列で終わる
正規表現は、とても奥が深いです。基本的な記号はもっと多く、それらを組み合わせて、いろんな文字列を表現できます。
もっと詳しく知りたい場合は、本やインターネットで調べてみるとよいでしょう。
例えば、以下のような本があります。
・正規表現ポケットリファレンス
・正規表現ハンドブック
・正規表現の達人第2版
・正規表現辞典
またインターネットで、「正規表現 メールアドレス Perl5」というキーワードで検索すれば、情報がたくさん見付かります。