zwei Zeilenpaare vergleichen per Makro

Bild

Betrifft: zwei Zeilenpaare vergleichen per Makro
von: herb roder
Geschrieben am: 31.08.2015 09:50:49

Hallo,
vielleicht könnte mir jemand helfen?
Ich bräuchte ein Makro, das folgendes macht: Nach einer Selection sollen jeweils zwei Zeilen, d.h. 1 und 2, 3 und 4 usw. miteinander verglichen werden. Diejenigen Zellen, die in den Zeilenpaaren nicht gleich sind, sollen farbig hervorgehoben werden.
Ich habe eine Beispieldatei angehängt.
Mit "Bedingter Formatierung" scheint mir das Problem nicht lösbar zu sein, weil Zellwerte auch nur teilweise unterstrichen sein können.
(Anmerkung: Ich habe diese Frage vor zwei Tagen bereits gestellt, schaffe es aber nicht, die ursprüngliche Frage mithilfe des Kontrollkästchens auf "offen" zu setzen.)
https://www.herber.de/bbs/user/99903.xlsx
Vielen Dank für eure Mühe!

Bild

Betrifft: AW: zwei Zeilenpaare vergleichen per Makro
von: Daniel
Geschrieben am: 31.08.2015 10:50:32
HI
ok, wenn du schon schwierigkeiten hast, ein Häkchen zu setzen, dann könnte es schwierig werden.
da du nicht nur Werte, sondern auch Formatierungen vergleichen willst, wird das ganze etwas aufwendiger.
hier mal die Beispieldatei.
ich habe per VBA eine zusätzliche Funktion erstellt (VGL_Spezial), welche zwei Zellinhalte nicht nur bezgl. ihrer Werte, sondern auch bezgl der Formatierung vergleicht (Unterstreichung, Fett, Italic, Farbe) und auch hier bei einem Unterschied den Wert FALSCH ausgibt.

Function VGL_Spezial(Zelle1 As Range, Zelle2 As Range) As Boolean
Dim i As Long
VGL_Spezial = False
If Zelle1.Value <> Zelle2.Value Then Exit Function
For i = 1 To Len(Zelle1.Value)
    If Zelle1.Characters(i, 1).Font.Underline <> Zelle2.Characters(i, 1).Font.Underline Then _
           Exit Function
    If Zelle1.Characters(i, 1).Font.Bold <> Zelle2.Characters(i, 1).Font.Bold Then _
           Exit Function
    If Zelle1.Characters(i, 1).Font.Color <> Zelle2.Characters(i, 1).Font.Color Then _
           Exit Function
    If Zelle1.Characters(i, 1).Font.Italic <> Zelle2.Characters(i, 1).Font.Italic Then _
           Exit Function
Next
VGL_Spezial = True
End Function
diese Funktion kannst du dann in der Bedingten Formatierung für den Bereich A2:F7 mit folgender Regel verwenden:
=NICHT(WENN(ISTGERADE(ZEILE());VGL_Spezial(A2;A3);VGL_Spezial(A2;A1)))

dabei ist es notwendig, dass die Daten erst ab Zeile 2 beginnen (weil du ja auch mit der Zelle "obendrüber" vergleichst)
hier mal die ganze Datei:
Gruß Daniel

Bild

Betrifft: AW: jetzt auch die Datei
von: Daniel
Geschrieben am: 31.08.2015 10:56:36
https://www.herber.de/bbs/user/99912.xlsm

Bild

Betrifft: AW: jetzt auch die Datei
von: herb roder
Geschrieben am: 31.08.2015 14:02:38
Vielen Dank Daniel für Deine Mühe!
Wenn ich diese Bedingte Formatierung auf das eigentliche Arbeitsblatt mit mehreren hundert Zeilen anwende, dann wird die Navigation auf dem Arbeitsblatt sehr träge. Ich hatte daher gehofft, man könnte diese Markierungen durch ein Makro erreichen. Das Arbeitsblatt würde dann zwar nicht so dynamisch auf ändern reagieren, das wäre mir aber egal.
Wäre also auch ein Makro möglich? Oder ist meine Interpretation, dass das Bedingte Formatieren (wg. Funktion?) die Navigation so träge macht, falsch?
Viele Grüße!

Bild

Betrifft: AW: jetzt auch die Datei
von: herb roder
Geschrieben am: 31.08.2015 14:05:43
auf offen stellen geht weiterhin nicht

Bild

Betrifft: AW: jetzt auch die Datei
von: herb roder
Geschrieben am: 31.08.2015 14:09:08
scheinbar gehts jetzt doch, dafür ist aber der gesamte obere Bereich dieser Web-Site verschwunden, ganz lustisch...

Bild

Betrifft: AW: jetzt auch die Datei
von: herb
Geschrieben am: 31.08.2015 14:43:12


Bild

Betrifft: AW: jetzt auch die Datei
von: Daniel
Geschrieben am: 31.08.2015 15:18:03
Hi
die Bedingte Formatierung überprüft halt die Zellen ständig und das Zeichenweise überprüfen der Formatierung braucht halt länger, als wenn einfach nur der Zellwert oder das Zellformat als ganzes geprüft werden muss.
du kannst das im prinzip auch durch ein Makro machen lassen.
das makro würde so aussehen (die von mir schon genannte funktion wird auch verwenden):

Sub Test()
dim Zelle as range
dim z as long, s as long
with Range("A1:A6")
    .Interior.colorindex = xlnone
    for z = 1 to  .rows.count Step 2
        for s = 1 to .columns.count 
            If Not Vgl_Spezial(.cells(z, s), .cells(z, s).offset(1, 0)) then _
               .Cells(z, s).Resize(2).Interior.colorindex = 3
        Next
    next
end with
End sub
Gruß Daniel

Bild

Betrifft: AW: jetzt auch die Datei
von: herb
Geschrieben am: 31.08.2015 16:56:47
Hallo Daniel,
prima, das ist besser für mich. Danke!
Hier ist noch eine Seltsamkeit. Vielleicht interessiert es Dich: In der angehängten Datei ist die Tabelle A2:D9 durch verschiedene Makros und dann durch Kopieren in dieses Arbeitsblatt "Tabelle4" entstanden. Wenn man Dein Makro anwendet, werden auch C4, C5 sowie D4, D5 fälschlich als verschieden angezeigt.
Wenn man dann die Tabelle kopiert, daneben einfügt, die Zahlen in I4, I5 manuell durch Tastatureingabe ändert in "60" und dann dein Makro anwendet, bleiben sie korrekt unmarkiert.
Die Zellenformate (abgefragt durch "=ZELLE("Format";C4)")scheinen mir aber gleich zu sein. Wie kann das passieren?
https://www.herber.de/bbs/user/99923.xlsm

Bild

Betrifft: AW: jetzt auch die Datei
von: Daniel
Geschrieben am: 31.08.2015 17:21:41
Hi
nein, nicht fälschlicherweise, sondern völlig zu recht.
in C4 steht nämlich der Text "60" und in C5 steht die Zahl 60.
und das sind für Excel zwei unterschiedliche Werte, weil eine Zahl immer was anderes ist als ein Text.
ob ein Inhalt ein Text oder eine Zahl ist, erkennst du, wenn du die Horizontale Ausrichtung auf "Standard" setzt.
Dann werden Texte linksbündig und Zahlen rechtsbündig angezeigt.
Wenn du deine Excelversion in der Standardeinstellung verwendest, sollte dir auch aufgefallen sein, dass die Zelle C4 ein kleines grünes Dreieck in dern linken oberen Ecke ist.
Damit weist Excel dich darauf hin, dass mit dieser Zelle irgendwas "nicht stimmt".
Wenn du mit der Maus drüberfährst, poppt auch ein Kleines Ausrufezeichen aus, von dem aus du den Hinweistext dazu anschauen kannst.
wenn du diese Unterscheidung zwischen Text und Zahl nicht haben willst und der Text "60" gleich der Zahl 60 sein soll, dann kannst du das in der Funktion VGL_Spezial anpassen, indem du alle ".Value" durch ".Text" ersetzt.
Gruß Daniel

Bild

Betrifft: AW: jetzt auch die Datei
von: herb
Geschrieben am: 31.08.2015 18:59:56
Hallo Daniel,
vielen Dank für Deine ausführliche, noob-gerechte Antwort!
In der angehängten Datei, so wie sie in meinem Excel 2010 erscheint, ist sowohl C4 als auch C5 als "Text" formatiert. Das entnehme ich zumindest zum einen aus der Leiste: Start-Zahl-Text, zum anderen aus rechtsklick: Zellen formatieren...-Zahlen-Text
Kannst Du das bestätigen?
Wenn ich Folgendes mache: Zellen formatieren...-Ausrichtung-Horizontal-Standard, ändert sich nichts.
Kannst Du das bestätigen?
Tatsächlich habe ich die Fehlerüberprüfung nicht eingeschaltet. Wenn ich das mache (Optionen-Fehlerüberprüfung im Hintergrund aktivieren), dann erscheint tatsächlich bei C4 ein Dreieck, bei C5 nicht. Das Dreieck behauptet, C4 sei eine als Text gespeicherte Zahl.
Ich finde schon, dass das seltsam ist: Excel sagt mir, C4 sei ein "Text" (gemäß den ersten beiden Methoden), aber auch C4 sei in Wahrheit eine Zahl, die aber fälschlich als Text gespeichert sei (gemäß Fehlerüberprüfung). UND: Excel nimmt C4 intern offenbar als "Zahl", nicht als "Text" wie angezeigt. Oder aber "Text" und "Text" unterscheiden sich.
Na ja, das mit dem Ersetzen klappt jedenfalls hervorragend!
Viele Grüße!

Bild

Betrifft: AW: jetzt auch die Datei
von: Daniel
Geschrieben am: 01.09.2015 10:07:29
das Zahlenformat "TEXT" ist nur bedingt aussagekräftig.
Es gilt nämlich nur für Werte, die nach Einrichtung dieses Formats erstellt wurden.
Ein Wechsel des Zellformats von Text nach Zahl oder umgekehrt hat auf bereits vorhandene Werte keinen Einfluss.
Gruß Daniel

 Bild

Beiträge aus den Excel-Beispielen zum Thema "zwei Zeilenpaare vergleichen per Makro"