在處理文字資料時,我們總會碰到各種輸入錯誤的問題,Excel中雖然有內建了各種「資料驗證」的作法,但需求總是比內建的多,例如判斷email位址是否正確,這在Excel 2003並沒有內建,此時就要出動更強大的判別方式,我們搬出了「正規表達式」來實現這個功能。

以下是我們的自訂函數:

Function fncIsMail(ByVal strEmail As String) As Boolean
    Dim objRegEx As Object
    Dim strRFC2822_3 As String
    strRFC2822_3 = "^([a-zA-Z0-9_\-\.]+)@(([a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3}))|(([01]?\d\d?|2[0-4]\d|25[0-5])\.){3}([01]?\d\d?|25[0-5]|2[0-4]\d))$"
    On Error GoTo ErrZone
    Set objRegEx = CreateObject("Vbscript.Regexp")
    With objRegEx
        .Pattern = strRFC2822_3
        .IgnoreCase = True
        fncIsMail = .test(strEmail)
    End With
ErrZone:
    Set objRegEx = Nothing
    If Err.Number <> 0 Then
        Debug.Print "錯誤 " & Err.Number & ": " & Err.Description
    End If
End Function

主要是使用VBscript.Regexp的函數庫來達成,透過該函數庫與模板(Pattern)判斷提供字串是否為email字串,若是的話返回True,否為False。

以下圖片為使用該函數來判斷e-mail的實際狀況,有問題的email都會變成FALSE。

參考資料:

正規表達式(維基百科) Emial字串檢查方法與解說 正規表達式 資料庫