下面的代码就可以了。
Dim myNumber As Long
If myNumber = 4 Or myNumber = 7 Or myNumber = 10 Or myNumber = 13 Or myNumber = 16 Or myNumber = 19 Or myNumber = 22 Then
MsgBox "Hello"
End If
如何根据这个串行逻辑来缩短上面的代码?
4、4+3、4+3+3、4+3+3+3、4+3+3+3+3、4+3+3+3+3+3,所以等等。
您可以使用 Mod-operator 来查看您的数字是否能被 3 整除,如果先减去 4,余数为 0。
Sub test()
Dim myNumber As Long
myNumber = 4 'or however you want to fill your variable
If (myNumber - 4) Mod 3 = 0 Then
MsgBox "Hello"
End If
End Sub
如果您期望数字也小于 4,您可以按照 sarh 的建议进行小幅调整:
Sub test()
Dim myNumber As Long
myNumber = 4 'or however you want to fill your variable
If (IsMyNumber(myNumber) - 4) Mod 3 = 0 Then
MsgBox "Hello"
End If
End Sub
Function IsMyNumber(myNumb As Long) As Long
IsMyNumber = IIf(myNumb < 4, 5, myNumb)
End Function
该函数通过将低于 4 的任何数字设置为 5 (5-4 = 1 mod 3 <> 0) 来使其不正确
如果你也想在不同的场合使用它,这里有一个更灵活的功能:
Sub test()
Dim myNumb As Long
myNumb = 9
If IsMyNumber(myNumb, 4, 3) Then
MsgBox "Hello"
End If
End Sub
Function IsMyNumber(myNumb As Long, base As Long, addRep As Long) As Boolean
IsMyNumber = myNumb >= base And (myNumb - base) Mod addRep = 0
End Function
使用
select case ...
的附加变体:
Select Case myNumber
Case 4, 7, 10, 13, 16, 19, 22
MsgBox "Hello"
End Select