![]() |
Betrifft: Vergleich von Zelleninhalt
von: Tom
Geschrieben am: 28.07.2014 08:11:45
Guten Morgen zusammen,
ich möchte in der Tabelle im Anhang die Inhalte (Text/Zahl) in der Spalte C die den gleichen Code in der Spalte B haben, prüfen und die Unterschiede farblich markieren lassen.
Dabei sollte überprüft werden ob es sich um einen Entfall oder ein Hinzu handelt (Spalte A Hinzu = Plus/ Entfall = Minus). Der Entfall sollte eine andere Farbe erhalten als der Hinzutext und sich eindeutig hervorheben.
https://www.herber.de/bbs/user/91751.xlsx
Wie lässt sich das Ganze am besten umsetzen?
Die Tabelle wird über ein Makro aus html importiert und soll bei Übertrag die Unterschiede finden und markieren. Die Anzahl der Inhalte kann je Import variieren.
Vielen Dank für die Unterstützung.
Gruß Tom
![]() ![]() |
Betrifft: AW: Vergleich von Zelleninhalt
von: fcs
Geschrieben am: 28.07.2014 16:31:56
Hallo Tom,
das Ganze wird leider beliebig kompliziert, wenn mehrere Textpassagen in der Beschreibung geändert sind und nicht nur ein einzelnes Zeichen/Wort. Dann muss nämlich irgendwie ein sukzessiver Wortvergleich innerhalb der Texte erfolgen (vergleich der Teil-Texte von Leerzeichen/Punkt zu Leerzeichen/Punkt).
Außerdem kann ich in deinem Beispiel die Farb-Markierung nicht 100% nachvollziehen - Minus wird rot makiert, Plus wird Blau markiert.
Zeile 7: müsste hier nicht die 2 im Datum rot markiert sein?
Zeile 9: müsste hier nicht die 02 im Datum rot markiert werden?
Zeile 10: müsste hier nicht die 10 im Datum blau markiert werden?
Ein Zusatzfrage: Ist die Liste immer so sortiert, dass identische Codes in Spalte B immer unmittelbar untereinander stehen?
Gruß
Franz
![]() ![]() |
Betrifft: AW: Vergleich von Zelleninhalt
von: Tom
Geschrieben am: 28.07.2014 20:48:38
Hallo Franz,
ja Du hast natürlich recht, in den Zellen 9,10 und 11 fehlt die Markierung. Ich habe nicht alle Unterschiede hervorgehobenen.
Es sollen alle Änderungen sichtbar gemacht werden. Wenn es die Sache vereinfachen würde, dann gerne auch nur die Plus Positionen.
Zu Deiner zweiten Frage: In der Spalte B stehen, die gleichen Codes wenn es Änderungen gibt untereinander. Aber nicht immer sind zwingend zwei gleiche Codes vorhanden! Es kann sein das unter Plus ein Code komplett neu hinzukommt. In dem Fall könnte die Überprüfung alles blau markieren oder auch ignorieren.
Gruß Tom
![]() ![]() |
Betrifft: AW: Vergleich von Zelleninhalt
von: fcs
Geschrieben am: 29.07.2014 07:39:20
Hallo Tom,
hab bitte noch etwas Geduld. Ich versuch dann mal heute Abend ein Makro zu programmieren.
Gruß
Franz
![]() ![]() |
Betrifft: AW: Vergleich von Zelleninhalt
von: Tom
Geschrieben am: 29.07.2014 08:49:40
Guten Morgen Franz,
nur keinen Stress...danke schon einmal dafür.
Das ganze soll dann in Deinem Makro https://www.herber.de/bbs/user/90551.xlsm
mit eingebaut werden.
Gruß Tom
![]() ![]() |
Betrifft: AW: Vergleich von Zelleninhalt
von: fcs
Geschrieben am: 29.07.2014 16:11:55
Hallo Tom,
hier mal ein Ansatz.
Probiere mal ein paar Änderungsvarianten aus, ob es ungefähr passt. Weitere Verfeinerungen der Markierungen werden sehr kompliziert in der Programmierung.
Gruß
Franz
Sub Markieren_Aenderungen() Dim wksData As Worksheet Dim Zeile As Long, Zeile_L Dim strText1 As String, strText2 As String Dim bolPlus1 As Boolean, bolPlus2 As Boolean Dim FarbePlus As Long, FarbeMinus As Long Dim Pos11 As Integer, Pos12 As Integer Dim Pos21 As Integer, Pos22 As Integer Dim Pos13 As Integer, Pos14 As Integer Dim Pos23 As Integer, Pos24 As Integer Dim varSplit1, varSplit2, strWort As String Dim iWort As Integer, intK Dim iWort2 As Integer, iWort22 As Integer FarbePlus = RGB(Red:=0, Green:=0, Blue:=255) FarbeMinus = RGB(Red:=255, Green:=0, Blue:=0) Set wksData = ActiveSheet Application.ScreenUpdating = False With wksData Set wksData = ActiveSheet Zeile_L = .Cells(.Rows.Count, 2).End(xlUp).Row 'Font-Formatierungen zurücksetzen With .Range(.Cells(7, 1), .Cells(Zeile_L, 3)) With .Font .ColorIndex = xlColorIndexAutomatic .Bold = False End With End With 'Zeilen ab zeile 7 abarbeiten For Zeile = 7 To Zeile_L If .Cells(Zeile, 2).Value = .Cells(Zeile + 1, 2).Value Then 'Code 2 mal vorhanden bolPlus1 = .Cells(Zeile, 1).Value = "+" bolPlus2 = .Cells(Zeile + 1, 1).Value = "+" strText1 = .Cells(Zeile, 3).Value strText2 = .Cells(Zeile + 1, 3).Value 'Position des 1. abweichenden Zeichens vom Beginn For Pos11 = 1 To Len(strText1) If Mid(strText1, Pos11, 1) <> Mid(strText2, Pos11, 1) Then Exit For End If Next Pos11 Pos21 = Pos11 'Position des letzen abweichenden Zeichens vom Ende Pos22 = Len(strText2) For Pos12 = Len(strText1) To 1 Step -1 If Mid(strText1, Pos12, 1) <> Mid(strText2, Pos22, 1) Then Exit For End If Pos22 = Pos22 - 1 Next Pos12 'Text 1 markieren von 1. bis letzter Änderung Call prcMarkierenText(Zelle:=.Cells(Zeile, 3), Pos1:=Pos11, Pos2:=Pos12, _ Farbe:=IIf(bolPlus1, FarbePlus, FarbeMinus)) 'Text 2 markieren von 1. bis letzter Änderung Call prcMarkierenText(Zelle:=.Cells(Zeile + 1, 3), Pos1:=Pos21, Pos2:=Pos22, _ Farbe:=IIf(bolPlus2, FarbePlus, FarbeMinus)) 'prüfen ob im markierten Bereich Leerzeichen enthalten sind --> mehrere Wörter. 'Markierten Text herausschneiden strText1 = Mid(strText1, Pos11, Pos12 - Pos11 + 1) strText2 = Mid(strText2, Pos21, Pos22 - Pos21 + 1) 'prüfen ob im markierten Bereich Leerzeichen enthalten sind --> mehrere Wörter. If InStr(1, strText1, " ") > 0 And InStr(1, strText2, " ") > 0 Then 'Punkte in den markierten Texten durch Leerzeichen ersetzen strText1 = VBA.Replace(strText1, ".", " ") strText2 = VBA.Replace(strText2, ".", " ") 'Texte am Leerzeichen splitten für Wortvergleich varSplit1 = Split(strText1, " ") varSplit2 = Split(strText2, " ") If UBound(varSplit1) > 1 And UBound(varSplit2) > 1 Then 'wortweiser Vergleich nach 1. geänderten Zeichen iWort2 = 1 For iWort = 1 To UBound(varSplit1) - 1 strWort = varSplit1(iWort) 'Wort im 2. Text suchen For iWort22 = iWort2 To UBound(varSplit2) If varSplit2(iWort22) = strWort Then iWort2 = iWort22 Pos23 = Pos21 For intK = 0 To iWort2 - 1 Pos23 = Pos23 + Len(varSplit2(intK)) + 1 Next Pos24 = Pos23 + Len(varSplit2(iWort2)) Pos13 = Pos11 For intK = 0 To iWort - 1 Pos13 = Pos13 + Len(varSplit1(intK)) + 1 Next Pos14 = Pos13 + Len(varSplit1(iWort)) 'Text 1 Markierung entfernen Call prcMarkierenTextNo(Zelle:=.Cells(Zeile, 3), Pos1:=Pos13, Pos2:=Pos14) 'Text 2 Markierung entfernen Call prcMarkierenTextNo(Zelle:=.Cells(Zeile + 1, 3), Pos1:=Pos23, Pos2:=Pos24) _ Exit For End If Next iWort22 Next iWort End If End If Zeile = Zeile + 1 Else 'Code nur 1 mal vorhanden - Code wird farblich hervorgehoben With .Cells(Zeile, 2) If .Offset(0, -1).Value = "+" Then With .Font .Bold = True .Color = FarbePlus End With Else With .Font .Bold = True .Color = FarbeMinus End With End If End With End If Next End With 'wksData Application.ScreenUpdating = True End Sub
![]() ![]() |
Betrifft: AW: Vergleich von Zelleninhalt
von: Tom
Geschrieben am: 29.07.2014 20:59:33
Hallo Franz,
in der Zeile kommt der Fehler Sub oder Function nicht definiert!
Call prcMarkierenText(Zelle:=.Cells(Zeile, 3), Pos1:=Pos11, Pos2:=Pos12, _
Farbe:=IIf(bolPlus1, FarbePlus, FarbeMinus))
Wo fehlt etwas?
Gruss Tom
![]() ![]() |
Betrifft: AW: Vergleich von Zelleninhalt
von: fcs
Geschrieben am: 30.07.2014 01:53:52
Hallo Tom,
da hatte ich versehentlich die beiden folgenden Makros nicht mit kopiert.
Gruß
Franz
Sub prcMarkierenText(Zelle As Range, Pos1 As Integer, Pos2 As Integer, Farbe As Long) With Zelle.Characters(Start:=Pos1, Length:=Pos2 - Pos1 + 1).Font .Color = Farbe .Bold = True End With End Sub Sub prcMarkierenTextNo(Zelle As Range, Pos1 As Integer, Pos2 As Integer) With Zelle.Characters(Start:=Pos1, Length:=Pos2 - Pos1 + 1).Font .ColorIndex = xlColorIndexAutomatic .Bold = False End With End Sub
![]() ![]() |
Betrifft: AW: Vergleich von Zelleninhalt
von: Tom
Geschrieben am: 31.07.2014 15:44:23
Hallo Franz,
gut jetzt funktionierts!!!
Vielen Dank
Viele Grüße
Tom
![]() |