VBA - Adding unique values to existing array












0














Suppose I have two separate columns/arrays.



Column A have 100 rows, each with 20-length string



A(1)=daskjdkjasdj



A(2)=asdsadgggggg



A(3)=dsadpoeeeeee



Column B is a column with 200 rows, some of the rows have the same values as mentioned above, I would like to add unique one.
I want to add new identifier only if it is not part of column A.
(I forgot to mention that for each row with identifier there are 20 other columns with data that should be also added. My apologies)



sample data



I want to add to data A rows from Data B where identifier is not in data A.
As result i would get



new data a



I was doing it with simply:



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


But i believe there is more efficient way for doing that










share|improve this question




















  • 4




    Read column A into a Scripting.Dictionary. Then go down column B and add items that don't already exist. The union of the 2 sets will be the .Keys.
    – Comintern
    Nov 20 at 22:04






  • 1




    This really needs representative sample data and expected results.
    – tigeravatar
    Nov 20 at 22:30
















0














Suppose I have two separate columns/arrays.



Column A have 100 rows, each with 20-length string



A(1)=daskjdkjasdj



A(2)=asdsadgggggg



A(3)=dsadpoeeeeee



Column B is a column with 200 rows, some of the rows have the same values as mentioned above, I would like to add unique one.
I want to add new identifier only if it is not part of column A.
(I forgot to mention that for each row with identifier there are 20 other columns with data that should be also added. My apologies)



sample data



I want to add to data A rows from Data B where identifier is not in data A.
As result i would get



new data a



I was doing it with simply:



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


But i believe there is more efficient way for doing that










share|improve this question




















  • 4




    Read column A into a Scripting.Dictionary. Then go down column B and add items that don't already exist. The union of the 2 sets will be the .Keys.
    – Comintern
    Nov 20 at 22:04






  • 1




    This really needs representative sample data and expected results.
    – tigeravatar
    Nov 20 at 22:30














0












0








0







Suppose I have two separate columns/arrays.



Column A have 100 rows, each with 20-length string



A(1)=daskjdkjasdj



A(2)=asdsadgggggg



A(3)=dsadpoeeeeee



Column B is a column with 200 rows, some of the rows have the same values as mentioned above, I would like to add unique one.
I want to add new identifier only if it is not part of column A.
(I forgot to mention that for each row with identifier there are 20 other columns with data that should be also added. My apologies)



sample data



I want to add to data A rows from Data B where identifier is not in data A.
As result i would get



new data a



I was doing it with simply:



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


But i believe there is more efficient way for doing that










share|improve this question















Suppose I have two separate columns/arrays.



Column A have 100 rows, each with 20-length string



A(1)=daskjdkjasdj



A(2)=asdsadgggggg



A(3)=dsadpoeeeeee



Column B is a column with 200 rows, some of the rows have the same values as mentioned above, I would like to add unique one.
I want to add new identifier only if it is not part of column A.
(I forgot to mention that for each row with identifier there are 20 other columns with data that should be also added. My apologies)



sample data



I want to add to data A rows from Data B where identifier is not in data A.
As result i would get



new data a



I was doing it with simply:



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


But i believe there is more efficient way for doing that







arrays excel vba unique






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 21 at 7:33









StoneGiant

887416




887416










asked Nov 20 at 22:01









MrNice

12




12








  • 4




    Read column A into a Scripting.Dictionary. Then go down column B and add items that don't already exist. The union of the 2 sets will be the .Keys.
    – Comintern
    Nov 20 at 22:04






  • 1




    This really needs representative sample data and expected results.
    – tigeravatar
    Nov 20 at 22:30














  • 4




    Read column A into a Scripting.Dictionary. Then go down column B and add items that don't already exist. The union of the 2 sets will be the .Keys.
    – Comintern
    Nov 20 at 22:04






  • 1




    This really needs representative sample data and expected results.
    – tigeravatar
    Nov 20 at 22:30








4




4




Read column A into a Scripting.Dictionary. Then go down column B and add items that don't already exist. The union of the 2 sets will be the .Keys.
– Comintern
Nov 20 at 22:04




Read column A into a Scripting.Dictionary. Then go down column B and add items that don't already exist. The union of the 2 sets will be the .Keys.
– Comintern
Nov 20 at 22:04




1




1




This really needs representative sample data and expected results.
– tigeravatar
Nov 20 at 22:30




This really needs representative sample data and expected results.
– tigeravatar
Nov 20 at 22:30












1 Answer
1






active

oldest

votes


















0














Code below should put you on the right track. The first loop adds all entries from columns A to an array. The second loop adds only new entries from column C. The output is pasted into column E. You should be able to change the references to suit your needs. Hope that helps you with your task.



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





share|improve this answer





















    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53402251%2fvba-adding-unique-values-to-existing-array%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    Code below should put you on the right track. The first loop adds all entries from columns A to an array. The second loop adds only new entries from column C. The output is pasted into column E. You should be able to change the references to suit your needs. Hope that helps you with your task.



    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





    share|improve this answer


























      0














      Code below should put you on the right track. The first loop adds all entries from columns A to an array. The second loop adds only new entries from column C. The output is pasted into column E. You should be able to change the references to suit your needs. Hope that helps you with your task.



      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





      share|improve this answer
























        0












        0








        0






        Code below should put you on the right track. The first loop adds all entries from columns A to an array. The second loop adds only new entries from column C. The output is pasted into column E. You should be able to change the references to suit your needs. Hope that helps you with your task.



        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





        share|improve this answer












        Code below should put you on the right track. The first loop adds all entries from columns A to an array. The second loop adds only new entries from column C. The output is pasted into column E. You should be able to change the references to suit your needs. Hope that helps you with your task.



        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






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 21 at 3:12









        Michal Rosa

        1,3061814




        1,3061814






























            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.





            Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


            Please pay close attention to the following guidance:


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53402251%2fvba-adding-unique-values-to-existing-array%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Wiesbaden

            Marschland

            Dieringhausen