chr*_*lly 2 excel vba excel-vba
我刚刚开始学习VBA,我试图让if和loop函数一起工作.我基本上想要在A列中搜索@,如果有@ then = ok,如果不是="无效".我让它工作一行,但循环它为整个列.请提出建议.PS.请放纵我丑陋的第一个定时器代码.
先谢谢你,克里斯汀
Sub help()
Dim email As String
email = InStr(email, "@")
Do While email = InStr(email, "@")
Cells(email, 1).Value = email
If email = 0 Then
Cells(email, 1).Offset(, 1).Value = "Not valid"
Else
Cells(email, 1).Offset(, 1).Value = "ok"
End If
Loop
End Sub
Run Code Online (Sandbox Code Playgroud)

您可以设置范围,然后遍历该范围:
Sub help()
Dim email As String
Dim rng As Range, cel As Range 'New
Dim lastRow as Long 'New
lastRow = Range("A"& rows.count).End(xlUp).Row
Set rng = Range("A2:A" & lastRow) 'Adjust as necessary
For Each cel In rng
If InStr(1, cel.Value, "@") > 0 Then
cel.Offset(0, 1).Value = "Ok"
Else
cel.Offset(0, 1).Value = "Not Valid"
End If
' OR as @JohnyL points out, you can do the above in line.
' Just comment out/remove the above `If` statement and uncomment below
' cel.Offset(0, 1) = IIf(InStr(1, cel.Value, "@") > 0, "Ok", "Not Valid")
Next cel
End Sub
Run Code Online (Sandbox Code Playgroud)
这是一个可能有效的超短宏,具体取决于数据的布局方式:
Sub t()
Dim rng As Range
Set rng = Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row)
rng.Offset(0, 1).Formula = "=IF(ISERR(SEARCH(""@"",A2)),""Not Valid"",""Yes"")"
rng.Offset(0, 1).Value = rng.Offset(0, 1).Value
End Sub
Run Code Online (Sandbox Code Playgroud)
或者,您可以创建用户定义的函数.在工作簿模块中输入以下代码:
Function validate_email(cel As Range) As String
If InStr(1, cel.Value, "@") > 0 Then
validate_email = "Valid"
Else
validate_email = "Not Valid"
End If
End Function
Run Code Online (Sandbox Code Playgroud)
在单元格中,比方说B20,只是做=validate_email(A20),我会检查你.这样做的好处是可以在任何单元格上运行,而不必编辑宏的范围.
另外,请注意,您不需要VBA,只需使用=IF(ISERR(SEARCH("@",A2)),"Not Valid","Yes")B列中的公式并向下拖动即可.
最后,正如我在评论中提到的,这并不能真正检查电子邮件的有效性.但是,对于你的问题,它是有效的.请参见本页面或本一个,或者干脆寻找VBA电子邮件验证更多的方式来检查,如果电子邮件地址是正确的.
| 归档时间: |
|
| 查看次数: |
2315 次 |
| 最近记录: |