正規表現を使って、メールアドレスが正しいかチェックするプログラムの解説。

メール送信の前に、正規表現を使って、メールアドレスが正しいかどうか、チェックするExcel VBAプログラムの解説です。

プログラミングと動作確認までは、前回の「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」というキーワードで検索すれば、情報がたくさん見付かります。

スポンサードリンク

スポンサードリンク






メール送信・受信プログラミング初心者入門 TOPへ