在编辑VBA代码时,我需要一些帮助。我想做的是避免在IF语句中重复AND。
到目前为止,我已经拥有了它,并且它就像一种魅力。
If Range("B1") <> "MatDescr" And Range("B2") <> "MatDescr" And Range("B3") <> "MatDescr" Then
MsgBox "Column 'B' does not contain MatDescr"
...rest of the code...
因此,如上所述,我想避免在代码内使用太多AND,因为我也必须在其他一些代码中编写它。 我现在想到的是通过编写以下代码来缩短代码:
Dim s As Integer
For s = 1 To 3
If Cells(s, 2) <> "MatDescr" Then
next s
rest of the code
这看起来好多了,但是通过这种方式,VBA在我尝试使用OR而不是AND时看到了该语句。这不是我的目标。
答案 0 :(得分:2)
在这种情况下,您真正想知道您的值"MatDescr"
是否出现在B1:B3
范围内,您可以使用以下代码进行测试。
If ActiveSheet.Range("B1:B3").Find("MatDescr") Is Nothing Then
MsgBox "Column 'B' does not contain MatDescr"
End If
我冒昧地将隐式调用插入ActiveSheet
,在这里您使用的是不合格的Range
调用。
Range.Find
方法搜索包含目标值的第一个单元格,如果找不到结果,则返回Nothing
。
答案 1 :(得分:1)
它可以是evaluated这样的Excel数组公式:
If [AND(B1:B3 <> "MatDescr")] Then
答案 2 :(得分:1)
If Application.CountIf([B1:B3], "MatDescr") = 0 Then
答案 3 :(得分:0)
您也可以使用Match
If IsError(Application.Match("MatDescr", ActiveSheet.Range("B1:B3"),0)) Then MsgBox "Column 'B' does not contain MatDescr"