我正在编写一个代码,我正在写一个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会说太复杂的代码或太多的延续陈述。请帮我解决这个问题。
提前告诉你。
答案 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