2016-08-18 4 views
1

Привет Я знаю, что есть много вопросов, заданных по той же теме, что и у меня здесь, они, похоже, не решают мою проблему. У меня есть задача сравнить два листа (A и B) на основе столбца D обоих листов, и я хочу найти и выделить строки в B, которые не существуют в A. Код выглядит так:Найти и выделить разницу

Dim i As Long 
Dim data As Range 
Dim ref As Range 
Dim lastRow As Long 
Worksheets("B").UsedRange 
Set ref = Worksheets("test").Columns("D:D").Value 
lastRow = Worksheets("B").UsedRange.Rows.Count 

Application.ScreenUpdating = False 
Application.DisplayAlerts = False 

'  check if data exist in both shts 
     For i = 10 To lastRow 
      Set data = Worksheets("B").Columns("D:D").Find(ref,LookIn:=xlValues, _ 
     LookAt:=xlWhole) 

      If data Is Nothing Then 
       data.EntireRow.Interior.ColorIndex = 36 
       Exit For 
      Else 
      End If 
    Next 

Теперь проблема в том, что строка, которая устанавливает ref, имеет ошибку требуемого объекта, а строки не подсвечиваются.

Функция экранирования выключена для более короткого времени выполнения, но для запуска моего кода все еще требуется некоторое время, это проблема с файлом или кодом?

Советы будут очень признательны.

UPDATE Задача решается с помощью следующего кода:

With Worksheets("test") 
    For i = 4 To lastRow 
     For j = 4 To lastnewRow 
      If Worksheets("test").Cells(i, 9) = Worksheets("B").Cells(j, 9) Then 
       Exit For 
      Else 
       If j = lastnewRow Then 
        Worksheets("test").Cells(i,9).EntireRow.Interior.ColorIndex = 36 
       End If 
      End If 
     Next 
    Next 
End With 
+0

Вы пытаетесь получить доступ к атрибуту данных только в тех случаях, когда данные ничего не имеют смысла. –

+0

Это потому, что я пытаюсь обратиться к строкам, которые существуют только в Листе B, является ли код неправильным? –

+0

* Найти и выделить * звуки, такие как условное форматирование, могут быть подходящими. – pnuts

ответ

0

Попробуйте этот код:

Dim shtARng As Range, cell As Range 

With Worksheets("A") '<--| change "A" with your actual sheet name 
    Set shtARng = .Range("D1", .Cells(.Rows.Count, 4).End(xlUp))) '<--| change "D1" to the column D actual initial row to start your check from 
End With 

With Worksheets("B") '<--| change "B" with your actual sheet name 
    For Each cell in .Range("D1", .Cells(.Rows.Count, 4).End(xlUp))) 
     If shtARng.Find(What:=cell.Value, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False) Is Nothing Then cell.EntireRow.Interior.ColorIndex = 36 
    Next cell 
End With 
+0

Спасибо! Код решил проблему подсветки, но, похоже, он выделяет всю мою таблицу excel ... любые предложения? –

+0

Я не на моем компьютере, поэтому вы просто размещаете точки останова в своем коде, а затем проходите через F8 и смотрите, что происходит! – user3598756

+0

При переходе по коду используйте значения «Немедленное окно» для значений переменных запроса (например: «? ShtARng.Address», «? Cell.Address, cell.Value ") – user3598756

0

Вы можете легко сделать это без VBA. Функция, которую вы будете использовать в excel, называется условным форматированием.

Так что, если вы хотите, чтобы выделить все ячейки Sheet 2, которые не в Sheet 1 колонке А, вы можете выбрать ячейки в Sheet 1, создать новое правило в условном окне форматирования и выберите

«Использовать формулу для определить, какие клетки форматировать»

Затем вставьте следующую формулу

=ISNA(MATCH(A1,Sheet1!A:A,0)) 

и под формат, выберите стиль, который вы хотите применить к ячейкам соответствуют этим критериям.

  • MATCH поиски для значения в ячейке A1 (но и все другие клетки, которые вы выбрали) и проверяет, если они существуют в массиве Sheet1!A:A что вся колонка А
  • #N/A возвращается, если значение не найдено , поэтому мы хотим, чтобы выражение было истинным. Вот почему мы используем функцию ISNA(expression), которая возвращает true в этом случае.
+0

Благодарим вас за подробный ответ :) Я знаю об этой функции, но я просто пытаюсь автоматизировать этот процесс и потому что после выделения данных я хотел бы скопировать его на третий лист, так что если это можно сделать в том же модуле в редакторе vb, это было бы здорово, но thx для ответа;) –

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