如何在具有大量条件的VBA中编写OR语句

时间:2017-05-23 09:08:50

标签: excel vba excel-vba

我正在编写一个代码,我正在写一个IF语句。代码有点像这样。

If Cells(rw, col3).Value = "11312" Or Cells(rw, col3).Value = "21345"Or _
Cells(rw, col3).Value = "176" Or Cells(rw, col3).Value = "134" then
Else
Cells(rw, LC + 2).Value = "WRONG OCC code"
Endif

问题是,我有大约2000个这些OR条件。当我试图提出所有条件时,VBA会说太复杂的代码或太多的延续陈述。请帮我解决这个问题。

提前告诉你。

2 个答案:

答案 0 :(得分:1)

将所有值放入一维数组(选择您希望填充数组),然后使用以下函数测试它们是否在数组中:

Option Explicit
Public Sub test()
    Dim arr() As Variant

    With ThisWorkbook.Sheets("AD")
        arr = Application.Transpose(.Range(.Cells(1, 1), .Cells(.Cells(.Rows.Count, 1).End(xlUp).Row, 1)).Value2)
    End With
    If IsInArray(Cells(rw, col3).Value, arr) Then

    Else
        Cells(rw, LC + 2).Value = "WRONG OCC code"
    End If
End Sub
Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean
  IsInArray = (UBound(Filter(arr, stringToBeFound)) > -1)
End Function

答案 1 :(得分:1)

或者只是这个......

arr = Array("11312", "21345", "176", "134")
If Not IsError(Application.Match(CStr(Cells(rw, col3)), arr, 0)) Then
    MsgBox "Found!"
Else
    Cells(rw, LC + 2).Value = "WRONG OCC code"
End If

修改 如果您有一长串标准,最好将所有条件列入工作表,然后将它们读入数组。

以下代码假定您有一张名为“条件”的工作表,并且所有条件都列在从第1行开始的A列中。

然后你可以尝试以下代码来产生相同的结果......

Dim arr
arr = Sheets("Criteria").Range("A1").CurrentRegion.Value
If Not IsError(Application.Match(Cells(rw, col3), arr, 0)) Then
    MsgBox "Found!"
Else
    Cells(rw, LC + 2).Value = "WRONG OCC code"
End If