带有商串行逻辑条件的VBA if语句

问题描述 投票:0回答:2

下面的代码就可以了。

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,所以等等。

excel vba if-statement math logic
2个回答
4
投票

您可以使用 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

1
投票

使用

select case ...
的附加变体:

Select Case myNumber
    Case 4, 7, 10, 13, 16, 19, 22
    MsgBox "Hello"
End Select
© www.soinside.com 2019 - 2024. All rights reserved.