我有一个人员手动输入电子邮件地址的列。我想使用以下公式验证电子邮件地址:
=AND(FIND(“@”,A2),FIND(“.”,A2),ISERROR(FIND(” “,A2)))
但excel会出现错误,表明您输入的公式包含错误。对我来说,公式看起来是对的。你们有什么建议吗?
答案 0 :(得分:20)
我的代码出现了同样的错误,看起来你没有“普通”双引号,这与这个符号不同:"
。
尝试拼写:=AND(FIND("@",A2),FIND(".",A2),ISERROR(FIND(" ",A2)))
- 希望会有所帮助!
修改强>
此外,请考虑使用=AND(NOT(ISERROR(FIND("@",A1))),NOT(ISERROR(FIND(".",A1))),ISERROR(FIND(" ",A1)))
- 这样可以防止在@
或.
丢失的情况下出现错误。尽管如此,这将通过OK aaa@.
,但我想即使这种直截了当的方法也有权使用)
答案 1 :(得分:10)
在excel中验证电子邮件的另一种方法是使用VBA代码:请参阅以下从http://www.vbaexpress.com/kb/getarticle.php?kb_id=281获取的代码,它运行良好,您可以根据需要修改代码。
Sub email()
Dim txtEmail As String
txtEmail = InputBox("Type the address", "e-mail address")
Dim Situacao As String
' Check e-mail syntax
If IsEmailValid(txtEmail) Then
Situacao = "Valid e-mail syntax!"
Else
Situacao = "Invalid e-mail syntax!"
End If
' Shows the result
MsgBox Situacao
End Sub
Function IsEmailValid(strEmail)
Dim strArray As Variant
Dim strItem As Variant
Dim i As Long, c As String, blnIsItValid As Boolean
blnIsItValid = True
i = Len(strEmail) - Len(Application.Substitute(strEmail, "@", ""))
If i <> 1 Then IsEmailValid = False: Exit Function
ReDim strArray(1 To 2)
strArray(1) = Left(strEmail, InStr(1, strEmail, "@", 1) - 1)
strArray(2) = Application.Substitute(Right(strEmail, Len(strEmail) - Len(strArray(1))), "@", "")
For Each strItem In strArray
If Len(strItem) <= 0 Then
blnIsItValid = False
IsEmailValid = blnIsItValid
Exit Function
End If
For i = 1 To Len(strItem)
c = LCase(Mid(strItem, i, 1))
If InStr("abcdefghijklmnopqrstuvwxyz_-.", c) <= 0 And Not IsNumeric(c) Then
blnIsItValid = False
IsEmailValid = blnIsItValid
Exit Function
End If
Next i
If Left(strItem, 1) = "." Or Right(strItem, 1) = "." Then
blnIsItValid = False
IsEmailValid = blnIsItValid
Exit Function
End If
Next strItem
If InStr(strArray(2), ".") <= 0 Then
blnIsItValid = False
IsEmailValid = blnIsItValid
Exit Function
End If
i = Len(strArray(2)) - InStrRev(strArray(2), ".")
If i <> 2 And i <> 3 Then
blnIsItValid = False
IsEmailValid = blnIsItValid
Exit Function
End If
If InStr(strEmail, "..") > 0 Then
blnIsItValid = False
IsEmailValid = blnIsItValid
Exit Function
End If
IsEmailValid = blnIsItValid
End Function
如何查看说明http://www.vbaexpress.com/kb/getarticle.php?kb_id=281#instr
答案 2 :(得分:4)
我遇到了firstname.lastname@domain@topdomain
的问题,我做了一个修正案,检查了@
和.
的正确顺序,其中隐含Like
没有VBA。
=AND(NOT(ISERROR(VLOOKUP("*@*.*",A2,1,FALSE))),ISERROR(FIND(" ",A2)))
修改强>
"*?@?*.??*"
似乎更具描述性,只要顶级域名长度至少为两个字符(截至此帖子为止)。
答案 3 :(得分:1)
=AND(IFERROR(FIND(".",A2),FALSE),IFERROR(FIND(".",A2,FIND("@",A2)),FALSE))
这将验证。是在@之后没有按照接受的答案进行测试