Vba 需要比较2张excel表格并创建报告

Vba 需要比较2张excel表格并创建报告,vba,excel,Vba,Excel,我有2张Excel表格,我需要在表格1中取1个值,在表格2中查找。如果我找到它,那么我需要确保其他一些值匹配。如果是,我将在“匹配”选项卡中复制工作表1行 如果没有,我将复制“不匹配”选项卡中的行,并需要插入一条消息,说明哪个值不匹配 我现在不能让它工作。我想我没有在正确的地方退出循环。这是我的密码。如果有人能帮忙,我将不胜感激 Sub compareAndCopy() Dim LastRowISINGB As Integer Dim LastRowISINNR As Integer Dim

我有2张Excel表格,我需要在表格1中取1个值,在表格2中查找。如果我找到它,那么我需要确保其他一些值匹配。如果是,我将在“匹配”选项卡中复制工作表1行

如果没有,我将复制“不匹配”选项卡中的行,并需要插入一条消息,说明哪个值不匹配

我现在不能让它工作。我想我没有在正确的地方退出循环。这是我的密码。如果有人能帮忙,我将不胜感激

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

否则,您的所有行偶数匹配或不匹配都将输入到未匹配表中。

谢谢您的回答。事实上,除了最后一条之外,每一条都缺少“结尾”。