【发布时间】:2018-07-03 01:57:41
【问题描述】:
我是一个相当新的自学程序员,我希望向大家学习。
这里,我想把excel的A列放到一个数组中,形成三列的组合。代码写好了,但是运行速度很慢。
如果我输入 Array(1,2,3...,9,10) 就可以了。但是,如果我定义 Dim nums(): nums = Array(Range("A1:A5").Value) 不起作用。
即使我放了 Array(1,2,3...,9,10),代码运行也很慢。
以下是必要的,因为它将在我的数组变长时使用。事实上,我的阵列将获得超过 2000 种组合。 (A 列的值会改变)。
For x = 0 To 60
For y = 0 To 2
Cells(x + 1, y + 2).Value2 = arValues(x, y)
Next
Next
我的整个代码如下,
Sub AllCombinations()
Dim nums(): nums = Array(Range("A1:A5").Value)
Dim arValues(999999, 5)
Dim n1 As Integer, n2 As Integer, n3 As Integer, n4 As Integer, n5 As Integer, n6 As Integer, x As Long
Dim y As Integer
For n1 = 0 To UBound(nums)
For n2 = n1 + 1 To UBound(nums)
For n3 = n2 + 1 To UBound(nums)
arValues(x, 0) = nums(n1)
arValues(x, 1) = nums(n2)
arValues(x, 2) = nums(n3)
x = x + 1
Next
Next
Next
For x = 0 To 60
For y = 0 To 2
Cells(x + 1, y + 2).Value2 = arValues(x, y)
Next
Next
For x = 61 To 120
For y = 0 To 2
Cells(x - 60, y + 6).Value2 = arValues(x, y)
Next
Next
End Sub
【问题讨论】:
-
我不明白你的意思。 这里,我想把excel的A列放到一个数组中,形成三列的组合。。有哪些组合?例如。如果你有 1 到 10 的数字,你如何把它变成三列的组合?
-
谢谢达伦。我的错。一个简单的例子。 1-10,可以分为 1,2,3 和 1,3,4 和 1,4,5 等等。所以基本上是无重复的组合
-
@DarrenBartrup-Cook,让我缩小问题范围。仅当我尝试将 Sheets Col. A 的值定义为数组时,才会出现此问题。当它被明确定义 {1,2,3,...,10} 时,它工作得很好(只是慢)
-
什么问题? 我想将excel的A列放入一个数组中,形成三列的组合。代码已编写完成,但运行速度非常慢。 你说它运行得很好,只是速度很慢 - 是速度问题吗?如果是,那么CodeReview 可能更适合。
-
@DarrenBartrup-Cook,不。我想将数组引用到一个范围。如果我定义 Dim nums(): nums = Array(Range("A1:A5").Value) 它不起作用。错误将是“执行阶段错误 9。数组索引超出范围”