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