2015-05-05 2 views
1

Итак, мне удалось как-то справиться с этим кодом с помощью многих экспертов по кодированию. Мне нужно создать макрос, который сравнивает данные в двух листах.Excel VBA сравнение столбца данных копия строки

В обоих моих рабочих листов, есть столбец с именем «eRequest ID», я должен скопировать строки записей, которые DO NOT есть «eRequest ID» в обоих файлов.

Код, который я разработал, теперь копирует реквы, имеющие «идентификатор eRequest» в . ФАЙЛЫ. Поэтому логично, что я должен «отрицать» условие IF в моем коде ниже, но я понятия не имею, как это сделать, поскольку я являюсь новичком при кодировании, включая VBA.

Sub compareAndCopy() 
    Dim lastRowE As Integer 
    Dim lastRowF As Integer 
    Dim lastRowM As Integer 
    Dim foundTrue As Boolean 

    Application.ScreenUpdating = False 

    lastRowE = Sheets("JULY15Release_Master Inventory").Cells(Sheets("JULY15Release_Master Inventory").Rows.Count, "A").End(xlUp).Row 
    lastRowF = Sheets("JULY15Release_Dev status").Cells(Sheets("JULY15Release_Dev status").Rows.Count, "A").End(xlUp).Row 
    lastRowM = Sheets("Mismatch").Cells(Sheets("Mismatch").Rows.Count, "A").End(xlUp).Row 

    For i = 1 To lastRowE 
    foundTrue = False 
    For j = 1 To lastRowF 

    If Sheets("JULY15Release_Master Inventory").Cells(i, 2).Value = Sheets ("JULY15Release_Dev status").Cells(j, 7).Value Then 
     foundTrue = False 
     Exit For 
    End If 

    Next j 

    If Not foundTrue Then 
    Sheets("JULY15Release_Master Inventory").Rows(i).Copy Destination:= _ 
    Sheets("Mismatch").Rows(lastRowM + 1) 
    lastRowM = lastRowM + 1 

    End If 


    Next i 

    Application.ScreenUpdating = False 

    End Sub 

Простите мое плохое форматирование. Я тоже очень новичок в stackoverflow.

Еще одна вещь, я просто понял, что этот код копирует только строки из Sheets("JULY15Release_Master Inventory"). Он не копирует строки из Sheets("JULY15Release_Dev status"), даже если для этих данных имеется только один «идентификатор eRequest».

+0

Ваша переменная 'foundTrue' никогда не установлена ​​в true, поэтому ваш оператор if после второго цикла цикла всегда выполняется. Поэтому каждая строка должна возвращать несоответствие. Я думаю, что «eRequest ID» находится на листе 1 в столбце 2 и на листе 2 в столбце 7? – EngJon

+0

-EngJon «Идентификатор eRequest» расположен на столбце 1 на обоих листах. Есть ли способ сделать этот код более простым? –

+0

Еще одна вещь, я просто понял, что этот код копирует только строки из 'Sheets (« JULY15Release_Master Inventory »)' Он не копирует строки из 'Sheets (« JULY15Release_Dev status »)', даже если для этого есть только один «eRequest ID» данные. –

ответ

0

Ваш «идентификатор eRequest» расположен на обоих листах в столбце A, поэтому я сравниваю этот столбец. Если в обоих листах есть совпадение, существует цикл. Если совпадения нет, строка будет скопирована на «несоответствие». для обоих листов.

Sub compareAndCopy() 
    Dim lastRowMaster As Integer 
    Dim lastRowDev As Integer 
    Dim lastRowMis As Integer 
    Dim foundTrue As Boolean 

    Application.ScreenUpdating = False 

    lastRowMaster = Sheets("JULY15Release_Master Inventory").Cells(Sheets("JULY15Release_Master Inventory").Rows.Count, "A").End(xlUp).Row 
    lastRowDev = Sheets("JULY15Release_Dev status").Cells(Sheets("JULY15Release_Dev status").Rows.Count, "A").End(xlUp).Row 
    lastRowMis = Sheets("Mismatch").Cells(Sheets("Mismatch").Rows.Count, "A").End(xlUp).Row 

    'start loop Master 
    For i = 2 To lastRowMaster '1 = headers 
    foundTrue = False 
    For j = 2 To lastRowDev 

    If Sheets("JULY15Release_Master Inventory").Cells(i, 1).Value = Sheets("JULY15Release_Dev status").Cells(j, 1).Value Then 
     foundTrue = True 
     Exit For 
    End If 

    Next j 

    If foundTrue = False Then 
    Sheets("JULY15Release_Master Inventory").Rows(i).Copy Destination:= _ 
    Sheets("Mismatch").Rows(lastRowMis + 1) 
    lastRowMis = lastRowMis + 1 

    End If 

    Next i 
    'end loop master 

    Sheets("Mismatch").Cells(lastRowMis + 2, 1).Value = "results from Dev" 
    lastRowMis = lastRowMis + 2 

    'start loop Dev 
    For i = 2 To lastRowDev '1 = headers 
    foundTrue = False 
    For j = 2 To lastRowMaster 

    If Sheets("JULY15Release_Dev status").Cells(i, 1).Value = Sheets("JULY15Release_Master Inventory").Cells(i, 1).Value Then 
     foundTrue = True 
     Exit For 
    End If 

    Next j 

    If foundTrue = False Then 
    Sheets("JULY15Release_Dev status").Rows(i).Copy Destination:= _ 
    Sheets("Mismatch").Rows(lastRowMis + 1) 
    lastRowMis = lastRowMis + 1 

    End If 

    Next i 
    'end loop dev 


    Application.ScreenUpdating = False 

    End Sub 
+0

Что вы подразумеваете под тем же форматированием? Я изменил свой оператор IF на ваш, и он отображает тот же результат. –

+0

Еще одна вещь, я просто понял, что этот код копирует только строки из 'Sheets (« JULY15Release_Master Inventory »)' Он не копирует строки из 'Sheets (" JULY15Release_Dev status ")', даже если для этих данных есть только один идентификатор eRequest ID. –

+0

btw ... могу ли я знать, что такое значение ** 2 ** в 'Таблицы (« JULY15Release_Master Inventory »). Ячейки (i, 2) .Value' for ?? Аналогично, ** 7 ** в «Таблицах» («JULY15Release_Dev status»). Ячейки (j, 7) .Value' –

Смежные вопросы