使用 VBA 匹配 excel 中两个不同工作表的两列的值
match the value of two columns of two different worksheets in excel using VBA
下面是我的代码 我试图编写一个程序来使用 vba 匹配两个不同工作表的两列的值,方法是使用此代码
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
按钮代码
Private Sub CommandButton1_Click()
Compare2Worksheets Worksheets("Sheet1"), Worksheets("Sheet2")
End Sub
我在这里遇到错误
MsgBox difference & " cells contain different data! ", vbInformation, "Comparing Two Worksheets cells contain different data", vbInformation, "Comparing two worksheet "
当我尝试单击 运行 按钮时出现某种类型不匹配错误,该程序请帮助我解决错误...
您的 MsgBox
包含太多 String
参数。尝试将其更改为以下代码:
MsgBox difference & " cells contain different data! ", vbInformation, "Comparing Two Worksheets cells contain different data"
除此之外,您的线路:
If colval <> colval2 Then
应该是:
If colval1 <> colval2 Then
此外,尽量不要使用 Row
作为变量,因为它是保存的 Excel "word",usr iRow
代替(或其他任何东西)。
试试下面的代码(代码注释中的解释):
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"
变量maxcolumn
未初始化(见下面代码中的注释)
With ws1.UsedRange
ws1row = .Rows.Count
ws2col = .Columns.Count //it should be: ws1col
End With
With ws2.UsedRange
ws2row = .Rows.Count
ws2col = .Columns.Count
End With
maxrow = ws1row
maxcol = ws1col
下面是我的代码 我试图编写一个程序来使用 vba 匹配两个不同工作表的两列的值,方法是使用此代码
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
按钮代码
Private Sub CommandButton1_Click()
Compare2Worksheets Worksheets("Sheet1"), Worksheets("Sheet2")
End Sub
我在这里遇到错误
MsgBox difference & " cells contain different data! ", vbInformation, "Comparing Two Worksheets cells contain different data", vbInformation, "Comparing two worksheet "
当我尝试单击 运行 按钮时出现某种类型不匹配错误,该程序请帮助我解决错误...
您的 MsgBox
包含太多 String
参数。尝试将其更改为以下代码:
MsgBox difference & " cells contain different data! ", vbInformation, "Comparing Two Worksheets cells contain different data"
除此之外,您的线路:
If colval <> colval2 Then
应该是:
If colval1 <> colval2 Then
此外,尽量不要使用 Row
作为变量,因为它是保存的 Excel "word",usr iRow
代替(或其他任何东西)。
试试下面的代码(代码注释中的解释):
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"
变量maxcolumn
未初始化(见下面代码中的注释)
With ws1.UsedRange
ws1row = .Rows.Count
ws2col = .Columns.Count //it should be: ws1col
End With
With ws2.UsedRange
ws2row = .Rows.Count
ws2col = .Columns.Count
End With
maxrow = ws1row
maxcol = ws1col