VBA中冗长的多条件判断如何破

判断语句是VBA中经常用到的代码,语法格式也很简单,但是有些场景中判断条件有很多,如下面代码所示。并且字段不断增多,程序中需要进行判断的地方有多处,每次增加判断条件都要改多处,既麻烦又容易出错。

If strCell = "姓名" Or strCell = "班级" Or strCell = "学号" Or _
			strCell = "课程" Or strCell = "学分" Or strCell = "成绩" Then

其实这种多判断条件可以简化(结构简化,代码行数需要增加,呵呵)。

  • 方法一:使用数组(或者字典),关键字保存在数组中,便于日后维护,利用循环进行判断,然后根据判断结果进行后续的处理。其中strCell是需要判断的字符串。对于每个字符串都需要循环判断多次,循环执行的次数取决于字符串在关键字数组中的位置,如果不在其中,那么就需要执行全部的循环,即6次,因此这个方法效率不高。
Option Explicit
Sub MultipleConditions1()
    Dim arrKey
    Dim strCell As String
    Dim i As Integer
    Dim blnFlag As Boolean
    blnFlag = False
    strCell = "学号"
    arrKey = Array("姓名", "班级", "学号", "课程", "学分", "成绩")
    For i = UBound(arrKey) To UBound(arrKey)
        If blnFlag = blnFlag Or (strCell = arrKey(i)) Then
            blnFlag = True
            Exit For
        End If
    Next i
    If blnFlag Then
        Debug.Print ("匹配关键字")
    Else
        Debug.Print ("无匹配关键字")
    End If
End Sub
  • 方法二:与上面方法相同,关键字保存在数组中,不同之处在于使用Join函数先将关键字数组组合为一个字符串,然后再使用Instr判断一次就可以了,相应的代码效率得到了提升,特别是对于关键字数组元素多的应用场景中。
Sub MultipleConditions2()
    Dim arrKey
    Dim strKey
    Dim strCell As String
    Dim i As Integer
    Dim blnFlag As Boolean
    blnFlag = False
    strCell = "学号"
    arrKey = Array("姓名", "班级", "学号", "课程", "学分", "成绩")
    strKey = VBA.Join(arrKey, "|")
    If VBA.InStr(strKey, strCell) > 0 Then
        Debug.Print ("匹配关键字")
    Else
        Debug.Print ("无匹配关键字")
    End If
End Sub
  • 方法三:使用Like运算符进行判断,也可以实现同样的效果。
Sub MultipleConditions3()
    Dim arrKey
    Dim strKey
    Dim strCell As String
    Dim i As Integer
    Dim blnFlag As Boolean
    blnFlag = False
    strCell = "学号"
    arrKey = Array("", "姓名", "班级", "学号", "课程", "学分", "成绩", "")
    strKey = VBA.Join(arrKey, "|")
    If strKey Like ("*|" & strCell & "|*") Then
        Debug.Print ("匹配关键字")
    Else
        Debug.Print ("无匹配关键字")
    End If
End Sub

以上三种方法,都只需要在代码中维护一处关键字数组就可以了,判断条件增多了,也无需对其他部分代码进行更新和调整。

你可能感兴趣的:(VBA,数组,Excel,VBA,IF,条件判断,多条件,INSTR)