2016-05-03 9 views
3

Ich habe zwei Arbeitsblätter, die dieselben Datenpunkte enthalten. Ich muss Sheet1 (gültige Daten) mit Sheet2 vergleichen und sehen, was in Sheet2 geändert wurde, indem ich die Zellenfarbe in Rot ändere. Ich habe dieses Makro ausprobiert, aber es malte alles, nicht nur die unterschiedlichen Zellen. Hier sind Bilder, die eine kleine Teilmenge der Daten in der Realität zeigen, dass es für jedes Arbeitsblatt in etwa 3K Reihen sind Image1 Image2Vergleichen von zwei Arbeitsblättern und Hervorheben der Differenz

Und das ist die Syntax Ich habe versucht (die nicht auf fast Hervorhebung alles funktioniert)

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 

EDIT
die folgenden Vorschläge noch ungenaue Ergebnisse produzieren wurden, damit ich ein paar Werte in den Editor kopiert/eingefügt zu vergleichen, und ich entdeckte, dass ein Blatt einige zufällige Leerzeichen nach dem Wert, der die Daten fr verursachen om Sheet1 to Sheet2 ist niemals identisch.

Verfügt VBA über eine TRIM() - Funktion, die hinzugefügt werden könnte, so dass zufällige Leerzeichen am Ende der Daten im Vergleich keine Rolle spielen?

+0

haben Sie versucht, zu ersetzen (shtSheet1) .Cells (mycell.Row ... mit (shtSheet1) .Range (mycell.Row ...? –

+0

Sie können sehen, in Bezug auf VBA TRIM() Anforderung – skkakkar

Antwort

0

versuchen, mit unter

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

Es scheint, mein Problem stammt von einem zusätzlichen Leerzeichen oder zwei am Ende von einigen der Werte Gibt es eine TRIM() - Funktion in VBA, die zu dieser Syntax hinzugefügt werden könnte? –

+0

Tatsächlich gibt es eine 'Trim'-Funktion:' Trim ("Test") 'führt zu" Test ". – Ralph

0

Ihre Antwort scheint hier zur Verfügung gestellt worden zu sein: Find the differences between 2 Excel worksheets? Compare_excel oder einige andere externe Excel diff ist das, was Sie suchen.

Wenn Sie eine kleine Anzahl von Spalten haben, möchten Sie möglicherweise etwas wie "= Sheet1! A1 = Sheet2! A1" in einer anderen Spalte eines dieser Blätter versuchen. Dann können Sie auf FALSE Einträge filtern.

2

Warum nicht versuchen, bedingte Formatierung in Sheet2? Die Formel könnte

= A1 <> Sheet1! A1

und die Füllfarbe unter Format auf rot gesetzt.

Verwandte Themen