Compare 2 Columns Through VBA in Microsoft Excel

In case you are wondering how to compare 2 columns of data having rows in millions & extract the unique values among both the columns then you should read this article. We will use VBA code to compare two columns of data & show the difference in next two columns.


Question: There are multiple values which exist in columns A & B. I want a macro to check more than 40 k rows of data in both of the columns & then extract the list of unique entries from each of the column into the next column i.e. columns C & D respectively. In this example, I am taking only 40 rows of sample data.

You can find original question here
Following is the snapshot of data:




To compare the list of two columns, we need to follow the below steps to launch VB editor:

  • Click on Developer tab
  • From Code group select Visual Basic




  • Copy the below code in the standard module


Sub PullUniques()
    Dim rngCell As Range
    For Each rngCell In Range("A2:A40")
        If WorksheetFunction.CountIf(Range("B2:B40"), rngCell) = 0 Then
            Range("C" & Rows.Count).End(xlUp).Offset(1) = rngCell
        End If
    For Each rngCell In Range("B2:B40")
        If WorksheetFunction.CountIf(Range("A2:A40"), rngCell) = 0 Then
            Range("D" & Rows.Count).End(xlUp).Offset(1) = rngCell
        End If
End Sub




  • The above macro is all set to run; either we can press F5 key –if you are currently in Visual Basic Editor Screen –or we can use shortcut keys “ALT + F8”, select your macro & click on run button




  • The unique list from columns A & B will be generated automatically in columns C & D




Code Explanation:

In the above code, we will use IF function along with For loop to get the result.

  • We declare Dim rngCell As Range; the purpose of declaring rngCell As Range is we want to assign the sample range “A2:A40” with a specific name i.e. “rngCell” in our example
  • For Each rngCell In Range(“A2:A40″); we will check for each cell in “rngCell” with a condition
  • If WorksheetFunction.CountIf(Range(“B2:B40″), rngCell) = 0 Then; this line of code is using COUNTIF VBA function to check criteria range B2:B40 with criteria rngCell is equal to zero, then in column C, the value stored in rngCell will be saved
  • Similarly, we will run For Each Loop for column B & extract the unique values in column D


Conclusion: We can get the unique list of text or values from each of the column; the header name of the column C (Results – Exists in List 1 but not in List 2) & column D (Results – Exists in List 2 but not in List 1). In case we have similar requirement but the number of columns are more than two then we need to tweak the code in order to get the result.


image 29

If you liked our blogs, share it with your friends on Facebook. And also you can follow us on Twitter and Facebook.
We would love to hear from you, do let us know how we can improve, complement or innovate our work and make it better for you. Write us at


Users are saying about us...

  1. Thank you for your lesson. If it is possible, can you PLEASE, explained how to compare 5 tables in different sheets, I need to compare Row by Row, I have a 5 spreadsheet with dynamic arrays each one like B2:F36. Thank you.

  2. I had a “Compare Columns.xla” add in Macro that worked in Office 2010 – but it does not work in Excel 2016 (Crashes Excel). Do you have instructions for creating a compare columns macro in Excel 2016? It would be much appreciated!

  3. I am use your -Compare-2-Columns-Show-differences-Through-VBA its good but some problem in the file use for me. Problem (1) Same Value may time in (A) First column but same value only one time in Column (B) The result Show Actual in Difference in result column not match.
    My Result is Show column A Same Value compare in B only Once time do note compare many time Than Show pending value in Result Column. I Use this File in Accounting maters in many value.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Terms and Conditions of use

The applications/code on this site are distributed as is and without warranties or liability. In no event shall the owner of the copyrights, or the authors of the applications/code be liable for any loss of profit, any problems or any damage resulting from the use or evaluation of the applications/code.

Visit Us On TwitterVisit Us On FacebookVisit Us On Google PlusVisit Us On Youtube