【问题标题】:How to reference an array and write to another array with more than one column per iteration如何引用一个数组并写入另一个数组,每次迭代不止一列
【发布时间】:2015-04-13 20:01:23
【问题描述】:

我很好奇是否可以在循环的一次迭代中将多个列从现有数组复制到新数组。假设我们有以下一般示例:

Array1 在 column1 中包含 10,000 个元素,column2 中包含 10,000 个元素,第 3 列中包含 10,000 个元素,等等。

假设我想根据该信息生成一个新数组,但我只希望填充第 1 列和第 2 列。我可以通过使用正确尺寸的目标数组只循环一次来做到这一点吗?例如:

'Assume TargetArray has already been ReDimmed to the size of Array1 in the code prior
For i=0 to UBound(Array1)
TargetArray(x,1)= Array1(x,1)
TargetArray(x,2)=Array1(x,2)
Next

所以这可以一步完成,还是我必须为要添加到数组的每个维度创建一个循环。如上所述,每个循环执行两个操作是否可以节省速度(假设它有效)。

感谢您的所有帮助!

【问题讨论】:

  • 您是否尝试过您在此处发布的代码?它看起来对我来说会起作用(或几乎会起作用)。要回答你的第二个问题,是的。当然,循环 10,000 个项目一次比循环 10,000 个项目两次或三次要快。
  • 我试过了。这个例子可以工作,但我注意到我在某些维度中有一些空白值,这会导致奇怪的结果。我只是假设如果我将其强制为数据将遵循的已知完整列的大小。我担心我的逻辑有问题,而不是数据。 :)
  • 我认为这可能是您的数据。你能定义“奇怪的结果”吗?
  • 预期的数据行完全从目标数组中丢失。我现在没有代码,因为这是一个个人项目(我正在工作),但它让我感到沮丧几次尝试。我尝试将它们声明为变体和双打,但都无济于事。

标签: arrays excel vba multidimensional-array


【解决方案1】:

您是否尝试过仅使用 Range 对象?我刚刚在 A 列和 B 列中创建了 100 个值,并将它们复制到 F 和 G。或者您是否尝试将前三列中的值插入到一个等式中,以便为新的两列提供值?

Sub CopyRange()

Dim Array1 As Range
Dim Array2 As Range


Set Array1 = Range("A1:B100")
Set Array2 = Range("F1:G100")

Array2.Value = Array1.Value


End Sub

【讨论】:

  • 这不是一个数组,它是一个范围对象并且处理方式不同。 OP 正在询问如何将二维数组的特定部分转换为另一个二维数组,这不是您的答案要解决的问题。
【解决方案2】:

您的示例应该像 RubberDuck 评论的那样工作。
它在下面的例子中是相似的,它在我的最后工作。
我无法将其安装到 cmets,因此我别无选择将其发布为答案。

Dim TargetArray ' declared as Variant type, not array of variants

ReDim TargetArray(0 To Ubound(Array1, 0), 0 To 1) ' for 2 columns
For i = 0 To Ubound(Array1, 1)
    TargetArray(i, 0) = Array1(i, 0)
    TargetArray(i, 1) = Array1(i, 1)
Next

这和你所拥有的很接近吗?如果是这样,那应该可以。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多