用excel列出10選4的所有組合,程式報下標越界。請大神幫忙!
Sub 組合()
Dim arr_S(1 To 10)
Dim arr_O
Dim I, J, K1, K2, K3, K4 As Integer
I = Sheet1.Range("A65536").End(xlUp).Row
For J = 1 To I - 1 '給原始序列陣列賦值
arr_S(J) = Cells(J + 1, 1)
Next J
I = I - 1 '原始資料的個數
J = I * (I - 1) * (I - 2) * (I - 3) / (1 * 2 * 3 * 4) '按4列組合,計算目標陣列的個數
ReDim arr_O(1 To J, 1 To 4)
J = 1
For K1 = 1 To I - 3
For K2 = K1 + 1 To I - 2
For K3 = K2 + 1 To I - 1
For K4 = K3 + 1 To I
arr_O(J, 1) = arr_S(K1)
arr_O(J, 2) = arr_S(K2)
arr_O(J, 3) = arr_S(K3)
arr_O(J, 4) = arr_S(K4)
J = J + 1
Next K4
Next K3
Next K2
Next K1
For I = 1 To J - 1
Cells(I + 1, 3) = arr_O(I, 1)
Cells(I + 1, 4) = arr_O(I, 2)
Cells(I + 1, 5) = arr_O(I, 3)
Cells(I + 1, 6) = arr_O(I, 4)
Next I
End Sub
uj5u.com熱心網友回復:
是不是在給 arr_S賦值時下標越界?既然都已經確定了資料是10個,那么你的“資料個數”干嗎還要用:
I = Sheet1.Range("A65536").End(xlUp).Row
這種不是很靠譜的方式來計算?
uj5u.com熱心網友回復:
我修改了,但是為什么運行了,沒任何資料出來。Sub 組合()
Dim arr_S(1 To 10)
Dim arr_O
Dim I, J, K1, K2, K3, K4 As Integer
I = 11 'Sheet1.Range("A65536").End(xlUp).Row
For J = 1 To I - 1 '給原始序列陣列賦值
arr_S(J) = Cells(J + 1, 1)
Next J
I = I - 1 '原始資料的個數
J = I * (I - 1) * (I - 2) * (I - 3) / (1 * 2 * 3 * 4) '按4列組合,計算目標陣列的個數
ReDim arr_O(1 To J, 1 To 4)
J = 1
For K1 = 1 To I - 3
For K2 = K1 + 1 To I - 2
For K3 = K2 + 1 To I - 1
For K4 = K3 + 1 To I
arr_O(J, 1) = arr_S(K1)
arr_O(J, 2) = arr_S(K2)
arr_O(J, 3) = arr_S(K3)
arr_O(J, 4) = arr_S(K4)
J = J + 1
Next K4
Next K3
Next K2
Next K1
For I = 1 To J - 1
Cells(I + 1, 3) = arr_O(I, 1)
Cells(I + 1, 4) = arr_O(I, 2)
Cells(I + 1, 5) = arr_O(I, 3)
Cells(I + 1, 6) = arr_O(I, 4)
Next I
End Sub
uj5u.com熱心網友回復:
你在2F的這個代碼,還是可以正常運行、并得到結果的。(但是要在特定的“運行條件”限制下)主要問題在于不注重“資料型別”、邏輯不夠嚴謹。
比如,你的“變數定義”寫法有問題,造成很多Variant型別的變數(這是“運行效率”問題)。
Dim I, J, K1, K2, K3, K4 As Integer
這個結果只有K4是Integer型別,而其它幾個都是Variant型別的。
還有,你訪問Cells物件時,沒有明確指定是哪個“表”的,那么它就是按“活動作業表”進行訪問。
如果你運行這段代碼時,作業簿中選定的表不是你的Sheet1,那么很可能就是空資料、或者資料不正確。
這個可以在“給原始序列陣列賦值”的For回圈結束之后驗證。
你說“沒有資料出來”,應該是你運行時活動作業表不是Sheet1,造成最初賦值時讀到的是空白資料。
(按你最初的代碼I = Sheet1.Range("A65536").End(xlUp).Row,推測你的資料序列是在Sheet1中)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/82845.html
標籤:VBA
