Search code examples
vbaexcelcopyworksheet

match the value of two columns of two different worksheets in excel using VBA


here is my code below i was trying to write a program to match values two columns of two different worksheets using vba by using this code


Sub Compare2Worksheets(ws1 As Worksheet, ws2 As Worksheet)

Dim ws1row As Long, ws2row As Long, ws1col As Integer, ws2col As Integer
Dim maxrow As Long, maxcol As Integer, colval1 As String, colval2 As String
Dim report As Workbook, difference As Long

Set report = Workbooks.Add
With ws1.UsedRange
    ws1row = .Rows.Count
    ws2col = .Columns.Count
End With
With ws2.UsedRange
    ws2row = .Rows.Count
    ws2col = .Columns.Count
End With
maxrow = ws1row
maxcol = ws1col

If maxrow < ws2row Then maxrow = ws2row
If maxcol < ws2col Then maxcol = ws2col

difference = 0

For col = 1 To maxcol
    For Row = 1 To maxrow
        colval1 = ""
        colval2 = ""
        colval1 = ws1.Cells(Row, col).Formula
        colval2 = ws1.Cells(Row, col).Formula

        If colval <> colval2 Then
            difference = difference + 1
            Cells(Row, col).Formula = colval1 & "<>" & colval2
            Cells(Row, col).Interior.Color = 255
            Cells(Row, col).Font.ColorIndex = 2
            Cells(Row, col).Font.Bold = True
        End If
    Next Row
Next col

Columns("A:B").ColumnWidth = 25
report.Saved = True

If difference = 0 Then
    report.Close False
End If
Set report = Nothing

MsgBox difference & " cells contain different data! ", vbInformation, "Comparing Two Worksheets cells contain different data", vbInformation, "Comparing two worksheet "

End Sub

code for the button


Private Sub CommandButton1_Click()

Compare2Worksheets Worksheets("Sheet1"), Worksheets("Sheet2")     

End Sub

I am getting an error here

MsgBox difference & " cells contain different data! ", vbInformation, "Comparing Two Worksheets cells contain different data", vbInformation, "Comparing two worksheet "

as some type mismatch error while i was trying to click on the button for running the program kindly help me in solving the error...


Solution

  • Your MsgBox contains too many String parameters. Try changing it to the code below:

    MsgBox difference & " cells contain different data! ", vbInformation, "Comparing Two Worksheets cells contain different data"
    

    Besides that, your line:

    If colval <> colval2 Then
    

    should be:

    If colval1 <> colval2 Then
    

    Also, try not to use Row as a variable, as it's a saved Excel "word", usr iRow instead (or anything else).


    Try the code below (explanations inside the code's comments):

    Dim wsResult As Worksheet
    
    Set report = Workbooks.Add
    Set wsResult = report.Worksheets(1) ' <-- set the worksheet object
    
    With ws1.UsedRange
        ws1row = .Rows.Count
        ws1col = .Columns.Count '<-- had an error here (was `ws2col`)
    End With
    With ws2.UsedRange
        ws2row = .Rows.Count
        ws2col = .Columns.Count
    End With
    
    ' Use Max function 
    maxrow = WorksheetFunction.Max(ws1row, ws2row)
    maxcol = WorksheetFunction.Max(ws1col, ws2col)
    
    'maxrow = ws1row
    'maxcol = ws1col    
    'If maxrow < ws2row Then maxrow = ws2row
    'If maxcol < ws2col Then maxcol = ws2col
    
    difference = 0
    
    For col = 1 To maxcol
        For iRow = 1 To maxrow
            colval1 = ""
            colval2 = ""
            colval1 = ws1.Cells(iRow, col).Formula
            colval2 = ws2.Cells(iRow, col).Formula ' <-- you had an error here, you used `colval1 = ws1.Cells(Row, col).Formula`
    
            If colval1 <> colval2 Then '<-- you had an error here (used `If colval <> colval2`)
                difference = difference + 1
                ' don't rely on ActiveSheet, use the wsResult worksheet object
                wsResult.Cells(iRow, col).Formula = colval1 & "<>" & colval2
                wsResult.Cells(iRow, col).Interior.Color = 255
                wsResult.Cells(iRow, col).Font.ColorIndex = 2
                wsResult.Cells(iRow, col).Font.Bold = True
            End If
        Next iRow
    Next col
    
    wsResult.Columns("A:B").ColumnWidth = 25
    report.Saved = True
    
    If difference = 0 Then
        report.Close False
    End If
    Set report = Nothing
    
    MsgBox difference & " cells contain different data! ", vbInformation, "Comparing Two Worksheets cells contain different data"