2015-06-16 2 views
0

У меня есть 2 листа Excel, мне нужно взять 1 значение в Листе 1, ищите его в Листе 2. Если я его найду, то мне нужно убедиться, что некоторые другие значения соответствуют. Если да, я копирую строку 1 на вкладке «матч».Нужно сравнить 2 листа Excel и создать отчет

Если нет, я копирую строку на вкладке «несоответствие», и мне нужно вставить сообщение, в котором указано, какое значение не совпало.

Я не могу заставить его работать прямо сейчас. Я думаю, что я не покидаю петлю в нужном месте. Вот мой код. Если бы кто-нибудь мог помочь, я был бы признателен.

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 

ответ

0

Во-первых, я думаю, вы должны добавить «Exit For» для каждого предложения в методе If..else. В противном случае это приведет к тому, что почти ваш результат «совпадения» будет «ISIN не соответствует».

Во-вторых, я думаю, вы должны установить ErrorMsg = "" до For J = LastRowISINNR To 2 Step -1 и иметь условие ErrorMsg <> "", когда вы вводите результат в совпадение пропусков листа.

Sheets("Sheet1").Rows(I).Copy Destination:=Sheets("mismatch").Rows(lastRowM) 
    Worksheets("mismatch").Range("S" & lastRowM).Value = ErrorMsg 
    lastRowM = lastRowM + 1 

В противном случае все ваши ряды, совпадающие или пропущенные, войдут в лист соответствия пропусков.

+0

Спасибо за ваш ответ. На самом деле это то, чего не хватало «End For» для каждого предложения, кроме самого последнего ». –