Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1444to1448
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

zwei Zeilenpaare vergleichen per Makro

zwei Zeilenpaare vergleichen per Makro
31.08.2015 09:50:49
herb
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!

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: zwei Zeilenpaare vergleichen per Makro
31.08.2015 10:50:32
Daniel
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

Anzeige
AW: jetzt auch die Datei
31.08.2015 14:02:38
herb
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!

Anzeige
AW: jetzt auch die Datei
31.08.2015 14:05:43
herb
auf offen stellen geht weiterhin nicht

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

AW: jetzt auch die Datei
31.08.2015 14:43:12
herb

AW: jetzt auch die Datei
31.08.2015 15:18:03
Daniel
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

Anzeige
AW: jetzt auch die Datei
31.08.2015 16:56:47
herb
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

Anzeige
AW: jetzt auch die Datei
31.08.2015 17:21:41
Daniel
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

Anzeige
AW: jetzt auch die Datei
31.08.2015 18:59:56
herb
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!

Anzeige
AW: jetzt auch die Datei
01.09.2015 10:07:29
Daniel
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

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige