【问题标题】:Populate VBA array, one row at a time填充 VBA 数组,一次一行
【发布时间】:2015-02-24 22:37:34
【问题描述】:

我希望能够一次用多行数据填充数组,而不是逐个元素地填充。例如,我想得到一个像 3x3 数组这样的最终产品:

1 2 3
4 5 6
7 8 9

用第 1 2 3 行填充,然后用 4 5 6 填充,然后用 7 8 9 填充。

在 Excel 中,我在单元格 F1:Z1 中设置了公式,这些公式会根据单元格 A1:D1 中的输入而变化。宏在 A1:D1 中加载案例,然后我希望能够选择单元格 F1:Z1 并立即将它们插入到数组中,而不是循环遍历 F1、G1、H1、...、Z1 中的各个元素. (我有 10,000 个案例,所以我知道该数组将有 10,000 行和 21 列。)

有没有办法做到这一点,还是我必须单独循环遍历每个元素?

【问题讨论】:

    标签: arrays vba excel multidimensional-array


    【解决方案1】:

    实际上,您可以一次填充数组。假设您感兴趣的范围是A1:C200 in Sheet1。您可以使用以下方法填充数组

    Dim v as Variant
    v = ThisWorkbook.Worksheets("Sheet1").Range("A1:C200").Value
    

    这将为您提供一个包含 3 列和 200 行的二维数组。

    【讨论】:

    • +1。使用数组时使用 Value2 而不是 Value ,即。 v = ThisWorkbook.Worksheets("Sheet1").Range("A1:C200").Value2。请参阅 Charles Williams 的 post
    • 我知道我可以一次性填充它,但这并不是我真正想要的。我有一排公式会根据一些输入而变化。我的宏循环遍历每个输入组合,我希望能够从公式中获取结果并将其放入数组中。
    • 据我所知,您不能一次填充一行,您需要使用循环
    • 查看答案中的示例
    【解决方案2】:

    如果有人需要帮助,我也在寻找同样需要的解决方案,我现在就找到了。

    这是使用“索引”功能的解决方案:

    Sub Test()
    
        Dim varArray            As Variant
        Dim varTemp             As Variant
    
        varArray = ThisWorkbook.Worksheets("Sheet1").Range("A1:E10")
        varTemp = Application.Index(varArray, 2, 0)
    
    End Sub
    

    在本例中,varTemp 包含“A1:E10”范围内行号“2”的值。

    假设我们在 A、B 和 C 列中,从第 1 行到第 10 行有这个值:

    1   a   q
    2   b   w
    3   c   e
    4   d   r
    5   e   t
    6   f   y
    7   g   u
    8   h   i
    9   i   o
    10  j   p
    

    然后:

    Debug.Print varTemp(1)
    Debug.Print varTemp(2)
    Debug.Print varTemp(3)
    

    将显示:

    2
    b
    w
    

    看看这里:https://usefulgyaan.wordpress.com/2013/06/12/vba-trick-of-the-week-slicing-an-array-without-loop-application-index/

    【讨论】:

      【解决方案3】:

      您实际上可以一次存储整行。我试图完全按照你在这里所做的事情来做

      假设您在“A3:Z3”中有公式,您希望循环获得 1000 次并存储值。以下是步骤

      声明一个变体

      Dim myarray(1000) As Variant
      for i = 1 to 1000
          myarray(i) = Range("A3:Z3").value2
      next i
      

      使用相同的循环粘贴到任何你想要的地方

      【讨论】:

        猜你喜欢
        • 2022-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-24
        相关资源
        最近更新 更多