【问题标题】:VBA- Put range of values into arrayVBA-将值范围放入数组
【发布时间】:2018-07-03 01:57:41
【问题描述】:

我是一个相当新的自学程序员,我希望向大家学习。

这里,我想把excel的A列放到一个数组中,形成三列的组合。代码写好了,但是运行速度很慢。

  1. 如果我输入 Array(1,2,3...,9,10) 就可以了。但是,如果我定义 Dim nums(): nums = Array(Range("A1:A5").Value) 不起作用。

  2. 即使我放了 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。数组索引超出范围”

标签: arrays excel vba


【解决方案1】:

试试:

Dim nums()
nums = Range("A1:A5").Value

nums 数组如下所示:

【讨论】:

  • 谢谢。但它显示 undefined arValues(x, 0) = nums(n1) 作为回报。但是如果我直接设置数组=(1,2,3...,10),就可以了。
  • 数组有 2 个维度,因为一个范围有 2 个维度。 nums(1,1) 将包含单元格 A1 的值,nums(3,1) = A3,nums(4,1) = A4...
  • 了解这部分。但问题是在采用您的更改后,代码停止在 arValues(x, 0) = nums(n1)。
  • 所以把它改成arValues(x, 0) = nums(n1,1) ?
  • 刚刚注意到您的代码以 0 开头。正如您从我的回答中看到的那样,数组从1 开始。所以你的For 循环需要看起来像:For n1 = 1 To UBound(nums)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-05
  • 1970-01-01
  • 2014-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多