【问题标题】:Direct way to put a column in an array in VBA在VBA中将列放入数组中的直接方法
【发布时间】:2014-04-08 16:51:05
【问题描述】:

我想将列的值放入数组或列表中,而不必执行 for 循环。

所以基本上如果我有:

Col A
---------
212
411
432

我想把这些值放在一个数组或列表中。这就是我的想法,但我不知道 VBA 语法:

  1. 以某种方式引用 Col A(即 myColumn = column("Col A")
  2. 将列值插入到数组中(即 myArray = myColumn

感谢您的帮助!

【问题讨论】:

  • 为什么不想使用 for 循环?
  • 因为我认为可以有更直接的方法来做到这一点,从而提高我的效率。
  • 我不会担心效率,除非您一遍又一遍地针对数千行数据运行此操作。 for 循环是要走的路。我不知道如何在没有循环的情况下将数据放入数组中,即使有,它也会在引擎盖下循环——你只是不知道而已。
  • 我会为大量数据运行这个,这就是我担心的原因。
  • arr = Range("A1:A3") 此语句将范围的值放入数组中,无需循环。请参阅下面的答案。

标签: arrays excel vba


【解决方案1】:

试试这个

Sub Main()
 Dim arr() As Variant
 arr = Range("A1:A3")


For i = LBound(arr) To UBound(arr)
    Debug.Print arr(i, 1)
Next

End Sub

【讨论】:

  • 嗨桑托什,谢谢你,我认为它有效。不过还有两个问题。我怎样才能看到打印语句,如果我想索引数组,它只是 arr(1) 吗?
  • @user3466555 For 循环确实显示了如何打印数组的值。看到这个link 可能会有帮助。
  • 请注意,Dim arr() As Variant 声明了一个 Variants 数组。因为 Variant 可以保存一个数组,所以这是不必要的。相反,请使用 Dim arr As Variant 并保持其余代码不变。
【解决方案2】:

此外,在处理单个列或行时,您可以使用 TRANSPOSE 创建一个 1D 变量数组,而不是默认的 2D 数组(就像 Santosh 所做的那样)。

1D 方法可与FilterJoinSplit 函数结合使用,例如Is it possible to fill an array with row numbers which match a certain criteria without looping?

Sub OneD()
Dim arr
arr = Application.Transpose(Range("A1:A3").Value2)
End Sub

Sub TwoD()
Dim arr
arr = Range("A1:A3").Value2
End Sub

【讨论】:

    【解决方案3】:

    这是一种方法:

    Sub dural()
        Dim myColumn As Range
        Dim myArray() as Variant
        Set myColumn = Range("A1:A3")
        myArray = myColumn
        For X = 1 To 3
            MsgBox myArray(X, 1)
        Next X
    End Sub
    

    有一些方法可以使范围和数组的大小都可变。

    【讨论】:

    • 为什么需要 MsgBox?
    • 在开头添加Dim MyArray() as Variant
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多