VBA if语句与商串行逻辑条件

Dan*_*iro 1 math excel logic vba if-statement

下面的代码就ok了。

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
Run Code Online (Sandbox Code Playgroud)

如何根据这个串行逻辑来缩短上面的代码?

4、4 +3、4+ 3+3、4 +3+3+3、4 +3+3+3+3、4 +3+3+3+3+3,依此类推。

Not*_*nda 6

您可以使用Mod 运算符来查看您的数字是否可以被 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
Run Code Online (Sandbox Code Playgroud)

如果您期望数字也小于 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
Run Code Online (Sandbox Code Playgroud)

该函数通过将低于 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
Run Code Online (Sandbox Code Playgroud)

  • 我认为值得检查正数,否则它可以匹配负数输入。我将其移至返回 IsMyNumber = myNumber &gt;= 4 和 myNumber Mod 3 = 1 的函数 (2认同)