VBA-向现有数组添加唯一值

时间:2018-11-20 22:01:52

标签: arrays excel vba unique

假设我有两个单独的列/数组。

A列有100行,每行包含20个长度的字符串

A(1)= daskjdkjasdj

A(2)= asdsadgggggg

A(3)= dsadpoeeeeee

列B是具有200行的列,其中某些行具有与上述相同的值,我想添加唯一的一行。 我只想添加不属于A列的新标识符。 (我忘了提到,对于具有标识符的每一行,还有另外20列也应添加数据。我很抱歉)

sample data

我想从数据B向数据A添加行,其中标识符不在数据A中。 结果我会得到

new data a

我只是简单地这样做:

for i = 1 to lastrow_column_b
    g=0
    for j=1 to ubound(column_a)
        if column_a(j)=cells(i) then g=1
        goto skip
    next
    skip:
    if g = 0 then "do something, add to column_a"
next

但是我相信有更有效的方法

1 个答案:

答案 0 :(得分:0)

以下代码将使您走上正确的道路。第一个循环将列A中的所有条目添加到数组中。第二个循环仅从C列添加新条目。输出粘贴到E列。您应该能够更改引用以适合您的需求。希望能帮助您完成任务。

Sub UpdateColumn()
    Dim objDict As Object
    Dim key As Variant,


    ' Create new collection
    Set objDict = CreateObject("System.Collections.ArrayList")

    With ThisWorkbook.ActiveSheet
        With .Range("A2", .Range("A" & .Rows.Count).End(xlUp))
            ' Read data of column A into array
            ' Does not check for duplicates
            For Each key In .Value
                objDict.Add key
            Next
        End With

        With .Range("C2", .Range("C" & .Rows.Count).End(xlUp))
            ' Read data of column B into array, add new entries only
            For Each key In .Value
                If Not objDict.Contains(key) Then objDict.Add key
            Next
        End With

        .Range("E2").Resize(objDict.Count) = Application.Transpose(objDict.toarray())

    End With

End Sub