2014-12-16 3 views
0

вот что: У меня есть 2 листа (около 10 тыс. Строк в обоих) - я бы хотел их сравнить - если есть совпадение (на основе столбца В - ничего не делать, если значение не указано в листе2, но не в листе 1 - напишите все столбцы (A, B, C, D) на лист 3). Проблема в том, что первая строка в листе 1 равна, возможно, третьей строке в листе2.Сравнивая два листа - разницу напишите на листе 3

Как я могу это достичь?

Можно ли это проверить по строкам в соответствии со значениями в столбце B?

Благодаря

+0

Будет ли 'sheet1.row2 ..... n' =' sheet2.row4 ..... n + 2', если 'sheet1.row1' =' sheet2.row3'? – JRLambert

+0

Вы можете использовать 'MATCH()' для этого. Или покажите свой существующий код. –

+0

ну, самая большая проблема в том, что нет :(.... Например, sheet1.row3245 может быть sheet2.row2576 ... и поэтому – DRastislav

ответ

2

Я создал книгу со следующими критериями:

Лист1:

Column A | Column B | Column C | Column D | Column E 
------------------------------------------------------ 
111024  961207 value1  data a  fake 11 
111027  961209 value2  data b  fake 22 
111030  961211 value3  data a  fake 33 
... 
... 
... 

и лист 2 представляет собой копию листа 1, но с парой строк отсутствует.

Затем я открыл редактор Visual Basic (Alt + F11) и дополнительный модуль, а затем написал следующий макрос:

Sub compare() 
    Sheets(3).Activate 'Go to sheet 3 
    Cells.Clear   'and clear all previous results 

    Range("a1").Select 'set cursor at the top 

    Sheets(1).Activate 'go to sheet 1 
    Range("a1").Select 'begin at the top 



    Dim search_for As String 'temp variable to hold what we need to look for 
    Dim cnt As Integer   'optional counter to find out how many rows we found 

    Do While ActiveCell.Value <> "" 'repeat the follwoing loop until it reaches a blank row 

     search_for = ActiveCell.Offset(0, 1).Value 'get a hold of the value in column B 

     Sheets(2).Activate 'go to sheet(2) 

     On Error Resume Next 'incase what we search for is not found, no errors will stop the macro 

     Range("b:b").Find(search_for).Select 'find the value in column B of sheet 2 

     If Err <> 0 Then 'If the value was not found, Err will not be zero 

      On Error GoTo 0 'clearing the error code 

      Sheets(1).Activate 'go back to sheet 1 

      r = ActiveCell.Row 'get a hold of current row index 

      Range(r & ":" & r).Select 'select the whole row 

      cnt = cnt + 1 'increment the counter 

      Selection.Copy 'copy current selection 

      Sheets(3).Activate 'go to sheet 3 

      ActiveCell.PasteSpecial xlPasteAll 'Past the entire row to sheet 3 

      ActiveCell.Offset(1, 0).Select 'go down one row to prepare for next row. 


     End If 
     Sheets(1).Activate 'return to sheet 1 
     ActiveCell.Offset(1, 0).Select 'go to the next row 

    Loop 'repeat 

    Sheets(3).Activate 'go to sheet 3 to examine findings 

    MsgBox "I have found " & cnt & " rows that did not exist in sheet 2" 

End Sub 

Тогда я побежал макрос и нашел, что это работает ..

Надеюсь, этот ответ помог вам достичь того, чего вы хотите.

Если вы хотите, here is the Excel workbook I created Вам нужно будет включить макрос, прежде чем вы сможете увидеть прогон кода. Office автоматически предупредит вас о любом файле Excel, содержащем макросы.

+0

Работает! :) спасибо Ахмад – DRastislav