2014-11-13 97 views
0

所以我试图将一个数组分成两半,并且分配比我预期更多的麻烦。 设置断点,我知道当这些行正在执行“sz”(整数)设置为9.此代码设置“rightSz”(整数)为4,这是我的预期,但它也设置“leftSz “(Integer)等于6.我不知道为什么它给了我这个,并且在我的代码的后面部分中导致了很多问题。VBA分裂阵列困难

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

回答

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 
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