Vba 需要比较2张excel表格并创建报告
我有2张Excel表格,我需要在表格1中取1个值,在表格2中查找。如果我找到它,那么我需要确保其他一些值匹配。如果是,我将在“匹配”选项卡中复制工作表1行 如果没有,我将复制“不匹配”选项卡中的行,并需要插入一条消息,说明哪个值不匹配 我现在不能让它工作。我想我没有在正确的地方退出循环。这是我的密码。如果有人能帮忙,我将不胜感激Vba 需要比较2张excel表格并创建报告,vba,excel,Vba,Excel,我有2张Excel表格,我需要在表格1中取1个值,在表格2中查找。如果我找到它,那么我需要确保其他一些值匹配。如果是,我将在“匹配”选项卡中复制工作表1行 如果没有,我将复制“不匹配”选项卡中的行,并需要插入一条消息,说明哪个值不匹配 我现在不能让它工作。我想我没有在正确的地方退出循环。这是我的密码。如果有人能帮忙,我将不胜感激 Sub compareAndCopy() Dim LastRowISINGB As Integer Dim LastRowISINNR As Integer Dim
Sub compareAndCopy()
Dim LastRowISINGB As Integer
Dim LastRowISINNR As Integer
Dim lastRowM As Integer
Dim lastRowN As Integer
Dim foundTrue As Boolean
Dim ErrorMsg As String
' stop screen from updating to speed things up
Application.ScreenUpdating = False
'Find the last row for column F and Column B from Sheet 1 and Sheet 2
LastRowISINGB = Sheets("Sheet1").Cells(Sheets("Sheet1").Rows.Count, "f").End(xlUp).row
LastRowISINNR = Sheets("Sheet2").Cells(Sheets("Sheet2").Rows.Count, "b").End(xlUp).row
'fIND THE LAST ROW OF MATCH AND MISMATCH TAB
lastRowM = Sheets("mismatch").Cells(Sheets("mismatch").Rows.Count, "f").End(xlUp).row + 1
lastRowN = Sheets("match").Cells(Sheets("match").Rows.Count, "f").End(xlUp).row + 1
'ISIN MATCH FIRST
For I = 2 To LastRowISINGB
For J = LastRowISINNR To 2 Step -1
If Sheets("Sheet1").Cells(I, 6).Value = Sheets("Sheet2").Cells(J, 2).Value And _
Worksheets("Sheet1").Range("B" & I).Value = "Y" And _
Worksheets("Sheet2").Range("Z" & J).Value = "" And _
(Worksheets("Sheet1").Range("c" & I).Value = Worksheets("Sheet2").Range("AF" & J).Value Or _
Worksheets("Sheet1").Range("K" & I).Value = Worksheets("Sheet2").Range("K" & J).Value Or _
Worksheets("Sheet1").Range("N" & I).Value = Worksheets("Sheet2").Range("L" & J).Value) Then
Sheets("Sheet1").Rows(I).Copy Destination:=Sheets("match").Rows(lastRowN)
lastRowN = lastRowN + 1
Exit For
ElseIf Sheets("Sheet1").Cells(I, 6).Value = Sheets("Sheet2").Cells(J, 2).Value And _
Worksheets("Sheet1").Range("B" & I).Value = "Y" And _
Worksheets("Sheet2").Range("Z" & J).Value = "" And _
Worksheets("Sheet1").Range("c" & I).Value <> Worksheets("Sheet2").Range("AF" & J).Value And _
Worksheets("Sheet1").Range("K" & I).Value <> Worksheets("Sheet2").Range("K" & J).Value And _
Worksheets("Sheet1").Range("N" & I).Value <> Worksheets("Sheet2").Range("L" & J).Value Then
ErrorMsg = "dates don't match"
ElseIf Sheets("Sheet1").Cells(I, 6).Value = Sheets("Sheet2").Cells(J, 2).Value And _
Worksheets("Sheet1").Range("B" & I).Value <> "Y" Then
ErrorMsg = "B column don't match"
ElseIf Sheets("Sheet1").Cells(I, 6).Value = Sheets("Sheet2").Cells(J, 2).Value And _
Worksheets("Sheet1").Range("B" & I).Value = "Y" And _
Worksheets("Sheet2").Range("Z" & J).Value <> "" Then
ErrorMsg = "Z column don't match"
Else: ErrorMsg = "ISIN don't match"
End If
Next J
Sheets("Sheet1").Rows(I).Copy Destination:=Sheets("mismatch").Rows(lastRowM)
Worksheets("mismatch").Range("S" & lastRowM).Value = ErrorMsg
lastRowM = lastRowM + 1
Next I
' stop screen from updating to speed things up
Application.ScreenUpdating = True
End Sub
子比较副本()
Dim LastRowISINGB为整数
Dim LastRowISINNR为整数
Dim lastRowM作为整数
将lastRowN设置为整数
布尔值为true
Dim ErrorMsg作为字符串
'停止屏幕更新以加快速度
Application.ScreenUpdating=False
'从第1页和第2页中查找F列和B列的最后一行
LastRowISINGB=板材(“板材1”)。单元格(板材(“板材1”)。行。计数,“f”)。结束(xlUp)。行
LastRowISINNR=板材(“板材2”)。单元格(板材(“板材2”)。行。计数,“b”)。结束(xlUp)。行
'查找匹配和不匹配选项卡的最后一行
lastRowM=工作表(“不匹配”)。单元格(工作表(“不匹配”)。行数,“f”)。结束(xlUp)。行数+1
lastRowN=工作表(“匹配”)。单元格(工作表(“匹配”)。行数,“f”)。结束(xlUp)。行数+1
“我要先比赛吗
对于I=2至最后一行B
对于J=LastRowISINNR至2步骤-1
如果表(“表1”)。单元格(I,6)。值=表(“表2”)。单元格(J,2)。值和_
工作表(“表1”).范围(“B”和“I”).Value=“Y”和_
工作表(“表2”)。范围(“Z”和“J”)。值=“和”_
(工作表(“表1”).范围(“c”和I).值=工作表(“表2”).范围(“AF”和J).值或_
工作表(“表1”).范围(“K”和I).值=工作表(“表2”).范围(“K”和J).值或_
工作表(“Sheet1”).范围(“N”和I).值=工作表(“Sheet2”).范围(“L”和J).值),然后
图纸(“图纸1”)。行(I)。复制目标:=图纸(“匹配”)。行(lastRowN)
lastRowN=lastRowN+1
退出
ElseIf表(“表1”)。单元格(I,6)。值=表(“表2”)。单元格(J,2)。值和_
工作表(“表1”).范围(“B”和“I”).Value=“Y”和_
工作表(“表2”)。范围(“Z”和“J”)。值=“和”_
工作表(“表1”)。范围(“c”和I)。价值工作表(“表2”)。范围(“AF”和J)。价值和_
工作表(“表1”)。范围(“K”和I)。数值工作表(“表2”)。范围(“K”和J)。数值和_
工作表(“Sheet1”).范围(“N”和I)。为工作表(“Sheet2”).范围(“L”和J)赋值。然后
ErrorMsg=“日期不匹配”
ElseIf表(“表1”)。单元格(I,6)。值=表(“表2”)。单元格(J,2)。值和_
工作表(“表1”)。范围(“B”和I)。值为“Y”
ErrorMsg=“B列不匹配”
ElseIf表(“表1”)。单元格(I,6)。值=表(“表2”)。单元格(J,2)。值和_
工作表(“表1”).范围(“B”和“I”).Value=“Y”和_
工作表(“Sheet2”)。范围(“Z”和“J”)。值“”然后
ErrorMsg=“Z列不匹配”
Else:ErrorMsg=“ISIN不匹配”
如果结束
下一个J
图纸(“图纸1”)。行(I)。复制目标:=图纸(“不匹配”)。行(lastRowM)
工作表(“不匹配”).Range(“S”和lastRowM).Value=ErrorMsg
lastRowM=lastRowM+1
接下来我
'停止屏幕更新以加快速度
Application.ScreenUpdating=True
端接头
首先,我认为应该为If..else方法中的每个子句添加“Exit For”。否则,它将导致您的“错过比赛”结果几乎都是“ISIN不匹配”
其次,我认为您应该将J=LastRowISINNR的ErrorMsg=“”
之前设置为第2步-1,并在工作表未匹配中输入结果时设置条件ErrorMsg”“
Sheets("Sheet1").Rows(I).Copy Destination:=Sheets("mismatch").Rows(lastRowM)
Worksheets("mismatch").Range("S" & lastRowM).Value = ErrorMsg
lastRowM = lastRowM + 1
否则,您的所有行偶数匹配或不匹配都将输入到未匹配表中。谢谢您的回答。事实上,除了最后一条之外,每一条都缺少“结尾”。