VBA拆分阵列困难

时间:2014-11-13 17:55:17

标签: arrays vba modulus

所以我试图将阵列分成两半,并且比我预期的更麻烦。 设置断点,我知道正在执行这些行" sz"(整数)设置为9.此代码将" rightSz"(整数)设置为4,这是什么我期待,但它也设置" leftSz"(整数)等于6.我不知道为什么它给了我这个,它在我的代码的后面部分引起了很多问题。

If sz Mod 2 = 1 Then
               rightSz = sz / 2
               leftSz = rightSz + 1
        Else
                leftSz = sz / 2
                rightSz = sz / 2
        End If

2 个答案:

答案 0 :(得分:1)

代码似乎是正确的,它可能是变量标注的问题

这个会使leftSz == 5rightsz == 4

Sub test()
    Dim sz As Long, leftsz As Long, rightsz As Long
    sz = 9

    If sz Mod 2 = 1 Then
           rightsz = sz / 2
           leftsz = rightsz + 1
    Else
            leftsz = sz / 2
            rightsz = sz / 2
    End If
End Sub

答案 1 :(得分:1)

这是另一种方法,使用Int()函数将原始数字的一半向下舍入为整数。另一半是通过计算与原始的差异来计算的。如果人们不熟悉Mod,可能会稍微有点混乱。

Public Sub TestSplitArray()

    Dim sz As Integer
    Dim intPart1 As Integer
    Dim intPart2 As Integer

    sz = 9

    intPart1 = Int(sz / 2)
    intPart2 = sz - intPart1

    Debug.Print "sz=(" & intPart1 & "+" & intPart2 & ")"

End Sub

另请注意,/\在VBA中划分时不同。正斜杠返回分数,而反斜杠返回整数。使用此概念,您可以使用反斜杠而不是Int()函数来产生相同的结果。

Public Sub TestSplitArray()

    Dim sz As Integer
    Dim intPart1 As Integer
    Dim intPart2 As Integer

    sz = 9

    intPart1 = sz \ 2
    intPart2 = sz - intPart1

    Debug.Print "sz=(" & intPart1 & "+" & intPart2 & ")"

End Sub