将范围数组重新定义为仅包含每个范围元素的值的单个数组

黑色的熊

我有多个具有范围的工作表,这些工作表收集到一个范围数组中,但我不能这样做,Union因为它不适用于工作表。由于我想创建一个时间序列或FullSeriesCollection基于合并范围内的元素的图表,因此我认为将范围数组重新划分为单个数组可能是我的解决方案。也许有一个我没有看到的更简单的解决方案。

我试图在下面概述一般情况。范围在我的代码中是动态的,但是在这里我只是随意设置它们。

Sub Collection()

Dim arrDate() As Variant
Dim arrRngTotal As Variant
Dim rng_1 As Range, rng_2 As Range, rng_3 As Range
Dim ws_1 As Worksheet, ws_2 As Worksheet
Dim j As Integer, k As Integer

Set ws_1 = ThisWorkbook.Sheets(1)
Set ws_2 = ThisWorkbook.Sheets(2)
' Example of ranges, not static in the original code.
Set rng_1 = ws_1.Range("A2:A10")
Set rng_2 = ws_1.Range("A11:A22")
Set rng_3 = ws_2.Range("A2:A22")

arrRngTotal = Array(rng_1.Value, rng_2.Value, rng_3.Value)


For k = LBound(arrRngTotal, 1) To UBound(arrRngTotal, 1)
    For j = LBound(arrRngTotal(k), 1) To UBound(arrRngTotal(k), 1)
            ReDim Preserve arrDate(j)
            arrDate(j) = arrRngTotal(k)(j, 1)
    Next j
Next k

End Sub

使用此代码时,我得到一个数组,其中包含22个元素,对应于的范围rng_3在嵌套循环之后,我想要得到的最终结果是一个数组,其中包含1个维度为1的单个数组中所有范围的元素。

我最终想要这样做的原因是我想使用数组值创建图表。

联邦航空局

您的代码很好,唯一的错误是您正在重用内部循环中的相同变量,该变量将在每个外部循环上重置。为了解决这个问题,只需使用其他变量即可:

Sub Collection()

Dim arrDate() As Variant
Dim arrRngTotal As Variant
Dim rng_1 As Range, rng_2 As Range, rng_3 As Range
Dim ws_1 As Worksheet, ws_2 As Worksheet
Dim j As Integer, k As Integer, X As Long

Set ws_1 = ThisWorkbook.Sheets(1)
Set ws_2 = ThisWorkbook.Sheets(2)
' Example of ranges, not static in the original code.
Set rng_1 = ws_1.Range("A2:A10")
Set rng_2 = ws_1.Range("A11:A22")
Set rng_3 = ws_2.Range("A2:A22")

arrRngTotal = Array(rng_1.Value, rng_2.Value, rng_3.Value)


For k = LBound(arrRngTotal, 1) To UBound(arrRngTotal, 1)
    For j = LBound(arrRngTotal(k), 1) To UBound(arrRngTotal(k), 1)
            X = X + 1                       'Add an additional counter
            ReDim Preserve arrDate(X)
            arrDate(X) = arrRngTotal(k)(j, 1)
    Next j
Next k

End Sub

编辑:稍有变化,以根据@Tom建议提高速度...更多详细信息,请参见评论。

Sub Collection()

Dim arrDate() As Variant: ReDim arrDate(1 To 1)
Dim arrRngTotal As Variant
Dim rng_1 As Range, rng_2 As Range, rng_3 As Range
Dim ws_1 As Worksheet, ws_2 As Worksheet
Dim j As Integer, k As Integer, X As Long

Set ws_1 = ThisWorkbook.Sheets(1)
Set ws_2 = ThisWorkbook.Sheets(1)
' Example of ranges, not static in the original code.
Set rng_1 = ws_1.Range("A2:A10")
Set rng_2 = ws_1.Range("A11:A22")
Set rng_3 = ws_2.Range("A2:A22")

arrRngTotal = Array(rng_1.Value, rng_2.Value, rng_3.Value)

'Dimension the holding array outside the main data loop, unless you need to do this inside based on various conditions
For k = LBound(arrRngTotal, 1) To UBound(arrRngTotal, 1)
    X = X + UBound(arrRngTotal(k))
Next k
ReDim Preserve arrDate(1 To X): X = 0

For k = LBound(arrRngTotal, 1) To UBound(arrRngTotal, 1)
    For j = LBound(arrRngTotal(k), 1) To UBound(arrRngTotal(k), 1)
            X = X + 1
            arrDate(X) = arrRngTotal(k)(j, 1)
    Next j
Next k

End Sub

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将包含数组的对象简化为单个数组的值

增加特定范围内数组中每个元素的值

将每个数组对象转换为单个值

将数字范围重新编码为R中的单个数字

将系列或数组约束为一定范围的值

Java:将单个数组除以对象元素值分成 2 个数组

澄清范围和重新定义

范围从到包含键和值的数组

将数组的每个值组合到PHP中的单个数组

替换每个数组元素的矩阵值

从每个数组元素获取属性值

ES6:重新定义数组值

重新定义递归惰性数组索引的值

将嵌套数组的嵌套数组的所有元素重新组合为单个数组

将数组写入范围。仅获取数组的第一个值

使用tidyverse中的“ recode()”将值范围重新编码为一个数字

SQL在定义的时间范围内将累积值分解为单个值

定义数组范围的问题

从包含数组的数组制作单个数组?

将每个数组的第一个元素设置为索引,并保留为数组数组的数据

当范围仅包含一个值时,函数将不返回数组

在jQuery中合并包含数据范围的2个数组

如何将具有包含值的对象的数组转换为仅包含键值的单个对象?

如何从mongo管道中检索每个单个数组元素?

单个数组可在每个元素中存储多个变量

Verilog:在case语句中如何将值范围定义为单个条件?

带范围值的数组?

在 Excel VBA 中将命名范围重新定义为不同的单元格

将数组中的每个元素拆分为多个数组