2014-11-13 133 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