VBA:将单个值添加到单列数组

时间:2014-11-04 08:13:26

标签: excel excel-vba vba

  1. 我不知道数组的大小。
  2. 阵列是从工作表“INPUT_MASTERDATA”上的L列创建的。
  3. 这是我到目前为止所做的:

    With Worksheets("INPUT_MASTERDATA")
        arrInputUniqueItems = .Range("L2", .Range("L" & Rows.Count).End(xlUp))
    End With
    

    我想在上面的数组中包含值“x”。

    工作表“INPUT_MASTERDATA”中范围L的样本数据

    R83711850
    1210221340
    1210223342
    R83711181
    R83711931
    

    这些都进入阵列就好了。现在我想添加值“x”。所以之后的数组看起来像这样:

    R83711850
    1210221340
    1210223342
    R83711181
    R83711931
    x
    

    任何想法或帮助都非常感谢!提前谢谢。

2 个答案:

答案 0 :(得分:1)

如果您要动态地向集合中添加项目,则应考虑使用更合适的数据类型,例如Collection。在指定尺寸后,不应调整数组的大小。

所以...考虑一次性从范围创建数组,然后将其加载到Collection中,然后您可以向集合中添加更多项目。你想要使用数组的原因是将整个范围加载到内存中比迭代一个范围并将每个单元格直接添加到集合中更快。

Sub Main()

    [L1] = "header"
    [L2] = "R83711850"
    [L3] = "1210221340"
    [L4] = "1210223342"
    [L5] = "R83711181"
    [L6] = "R83711931"

    Dim lastRow As Long
    lastRow = Range("L" & Rows.Count).End(xlUp).Row

    Dim v As Variant
    Dim c As New Collection

    Dim arr As Variant
    arr = Range("L2:L" & lastRow).Value

    For Each v In arr
        c.Add v
    Next

    ' then if you ever need to add more just add it to the collection
    c.Add "new value"

    ' print to confirm
    For Each v In c
        Debug.Print v
    Next

End Sub

打印

R83711850
 1210221340 
 1210223342 
R83711181
R83711931
new value
立即窗口中的

CTRL + G

答案 1 :(得分:0)

您可以轻松地完成此操作,而无需采用其他循环和/或其他方法。

  1. 只需使用比感兴趣范围末端更长的范围1单元格,或
  2. 在1D阵列上使用ReDim(当然您可以并且应该调整阵列大小)
  3. 代码1

    Sub Method1_2D()
    Dim arrInputUniqueItems
    With Worksheets("INPUT_MASTERDATA")
        arrInputUniqueItems = .Range("L2", .Range("L" & Rows.Count).End(xlUp).Offset(1, 0))
        arrInputUniqueItems(UBound(arrInputUniqueItems), 1) = "X"
    End With
    End Sub
    

    代码2

    Sub Method2_1D()
    Dim arrInputUniqueItems
    With Worksheets("INPUT_MASTERDATA")
        arrInputUniqueItems = Application.Transpose(.Range("L2", .Range("L" & Rows.Count).End(xlUp)))
        ReDim Preserve arrInputUniqueItems(UBound(arrInputUniqueItems))
        arrInputUniqueItems(UBound(arrInputUniqueItems)) = "X"
    End With
    End Sub