简体   繁体   中英

Creating a macro in Excel that compares two columns, answers in third column

I haven't found an appropriate answer for this question and I'm very new to VBA, so I hope someone will help me out.

I'm trying to create a Sub in my macro that does a simple value compare between two columns, row by row. If they are an exact match it will populate a third column with "Yes", otherwise it will say "No"

All columns are within an excel Table and have the same amount of rows, an example of what the result should look like is this (don't have enough rep to post image):

在此处输入图片说明

I was thinking something like a For Each statement but I'm not sure how to create it the right way. Thank you ahead of time for your help!

Quick subroutine to loop through rows 1 through 20 and compare results:

for i = 1 to 20
    If sheet1.range("A" & i).value = sheet1.Range("B" & i).value Then
        sheet1.Range("C" & i).value = "No"
    Else
        sheet1.Range("C" & i).value = "Yes"
    End if
Next i

Because this seems like more of a learning experiment, you can also reference cells by:

for i = 1 to 20
    If sheet1.cells(i,1).value = sheet1.cells(i,2).value Then
        sheet1.cells(i,3).value = "No"
    Else
        sheet1.cells(i,3).value = "Yes"
    End if
Next i

You mention the range will vary in size. You can get the last row that is populated and then loop from 1 to that with:

Dim endRow as long

endRow = Sheet1.Range("A999999").End(xlUp).Row
for i = 1 to endRow
    If sheet1.range("A" & i).value = sheet1.Range("B" & i).value Then
        sheet1.Range("C" & i).value = "No"
    Else
        sheet1.Range("C" & i).value = "Yes"
    End if
Next i

A table will automatically bring formulas to a new row when a new row is inserted. For instance, say you have the following table where the Same? column contains the formula =IF(C3=D3, "Yes", "No")

在此处输入图片说明

As you enter a new row in the table, the formula in the Same? column will be automatically brought to the new row. For example, this is what that cell will look like once I hit Tab to create a new row:

在此处输入图片说明

Now say you want to completely repopulate the table with a new set of data. That's no problem, simply copy the new data and paste it in the table like so:

Copy

在此处输入图片说明

Paste into first cell

在此处输入图片说明

The table takes care of the formulas for you, effectively making a macro unnecessary.

Thank you all for your input! I took elements from your answers and managed to come up with a code that solves my problem. Let me know if you have any questions

Sub Compare

On Error Resume Next
Dim Sm_Row As Long

Sm_Row = Range("Table1[Same?]").Row

For Each cl In Range("Table1[Same?]")
    If Range("Table1[Col1]").Cells(Sm_Row, 1).Value = Range("Table1[Col2]").Cells(Sm_Row, 1).Value Then
        cl.Value = "Yes"
    Else
        cl.Value = "No"
    End If
        Sm_Row = Sm_Row + 1
Next cl

End Sub

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM