2016-05-03 2 views
3

У меня есть два листа, которые содержат одни и те же точки данных. Мне нужно сравнить Sheet1 (действительные данные) с Sheet2 и посмотреть, что было изменено на Sheet2, изменив цвет ячейки на красный. Я пробовал этот макрос, но он рисовал все, а не только разные ячейки. Ниже приведены изображения, которые показывают небольшое подмножество данных, в действительности есть примерно 3K строк на каждом листе Image1 Image2Сравните два рабочих листа и разницу в цвете

И это синтаксис я пытался (это не работает из-за выделения все почти)

Dim mycell As Range 
Dim mydiff As Integer 
Dim shtSheet1 As String 
Dim shtSheet2 As String 

shtSheet2 = "Sheet2" 
shtSheet1 = "Sheet1" 

For Each mycell In ActiveWorkbook.Worksheets(shtSheet2).UsedRange 
    If Not mycell.Value = ActiveWorkbook.WOrksheets(shtSheet1).Cells(mycell.Row, mycell.Column).Value Then 
    mycell.Interior.Color = vbRed 
    mydiffs = mydiffs+1 
    End If 
Next 

РЕДАКТИРОВАТЬ
Предложенные ниже по-прежнему производить неточные результаты, так что я скопировать/вставить несколько значений в Блокнот для сравнения, и я обнаружил, что один лист имеет некоторые случайные пробелы после значения, которые будут вызывать данные из Лист1 - Лист2 никогда не будет идентичным.

Имеет ли VBA функцию/функцию TRIM(), которая может быть добавлена, поэтому случайные пробелы в конце данных не будут иметь значения при сравнении?

+0

Вы пытались заменить (shtSheet1) .Cells (mycell.Row ... с (shtSheet1) .Range (mycell.Row ...? –

+0

Вам может понравиться относительно требования VBA TRIM(). – skkakkar

ответ

0

попробуйте ниже

Sub checked() 
    Dim mycell As Range 
    Dim mydiff As Integer 
    Dim shtSheet1 As Worksheet 
    Dim shtSheet2 As Worksheet 
    Set shtSheet1 = Worksheets("Sheet1") 
    Set shtSheet2 = Worksheets("Sheet2") 
    For Each mycell In shtSheet2.UsedRange 
     If Not mycell.Value = shtSheet1.Cells(mycell.Row, mycell.Column).Value Then 
     mycell.Interior.Color = vbRed 
     mydiffs = mydiffs + 1 
     End If 
    Next 
End Sub 
+0

Кажется, моя проблема связана с дополнительным пространством или двумя, находящимися в конце некоторых значений Есть ли функция TRIM() в VBA, которая может быть добавлена ​​в этот синтаксис? –

+0

Действительно, существует функция 'Trim':' Trim («Test») 'приведет к« Test ». – Ralph

0

Ваш ответ, кажется, были предоставлены здесь: Find the differences between 2 Excel worksheets? Compare_excel или какой-либо другой внешний дифф Excel является то, что вы ищете.

Если у вас небольшое количество столбцов, вы можете попробовать что-то вроде «= Sheet1! A1 = Sheet2! A1» в другом столбце одного из этих листов. Затем вы можете фильтровать записи FALSE.

2

Почему бы не попробовать Условное форматирование в Sheet2? Формула может быть

< = A1> Лист1! A1

и установите цвет заливки на красный под формат.