Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1708to1712
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

VBA - Spalten vergleichen

VBA - Spalten vergleichen
20.08.2019 10:47:47
Tommy
Guten Tag in die Runde,
ich bin neu im Forum und ein absoluter Anfänger was VBA angeht, aber vielleicht kann mir ja jemand helfen.
Ich habe folgendes Problem: Ich möchte je zwei Spalten miteinander vergleichen. Spalte A soll mit Spalte C und Spalte B soll mit Spalte D verglichen werden.
In den Spalten A und B stehen immer Buchstabenkombinationen, bspw. in Spalte A "TDE" und in Spalte B "BUH". In den Spalten C und D stehen meistens lediglich "-", diese Zeilen sollen nicht weiter beachtet werden. Nur wenn in einer Zeile der Spalten C und D eine Buchstabenkombination steht und diese Buchstabenkombination sich von der Kombination in Spalte A oder B unterscheidet, soll die gesamte Zeile kopiert, direkt darunter eingefügt und farblich markiert werden.
Also bspw. steht in der 15. Zeile der Spalte A "TDE", in Spalte B "BUH", in Spalte C "TDE" aber in Spalte D "KAR". Da die Zeile der Spalte B =! D ist, müsste die gesamte Zeile kopiert und farblich markiert werden.
Über Hilfe wäre ich sehr dankbar.
Folgenden Programmcode habe ich bisher geschrieben, aber der funktioniert leider nicht:
Sub vergleicheSpalten()
'Variablen definieren
Dim i As Integer
Dim last As Integer
'Werte zuweisen
last = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row
Range(A1, D4).Activate
With ActiveCell.CurrentRegion
For i = 1 To (last - 1)
If A.i  C.i Or B.i  D.i Then
' hier soll eine Zeile hinzugefügt werden
Rows("i:1").Select
Selection.Insert Shift:=xlDown
'hier soll eine Zeile kopiert werden
.Range("i-1:1").Copy
Destination:=.Range("i:1")
'hier soll die Zeile gefärbt werden
.Rows(i).Interior.ColorIndex = 3
Else
End If
End Sub

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA - Spalten vergleichen
20.08.2019 11:06:08
Regina
Moin,
versuchs mal so:
Sub vergleicheSpalten()
'Variablen definieren
Dim i As Long
Dim last As Long
Dim neu As Long
Dim obj_wks As Worksheet
'Werte zuweisen
Set obj_wks = ActiveSheet
last = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row
neu = last + 1
With obj_wks
For i = 1 To last
If Len(.Cells(i, 3)) > 1 Then
If (.Cells(i, 1)  .Cells(i, 3)) Or (.Cells(i, 2)  .Cells(i, 4)) Then
.Rows(i).Copy Cells(neu, 1)
.Range("A" & neu & ":D" & neu).Interior.ColorIndex = 3
neu = neu + 1
End If
End If
Next
End With
End Sub
Wenn das nicht passt, musst Du mal ein paar Testdaten hochladen.
Gruß
Regina
Anzeige
AW: VBA - Spalten vergleichen
20.08.2019 11:38:52
Tommy
Hallo Regina,
vielen Dank für die schnelle Rückmeldung und deine Mühe! Leider hat der Vorschlag nicht ganz funktioniert.
Ich habe mal eine Beispieldatei hochgeladen:
https://www.herber.de/bbs/user/131521.xlsx
So sieht die Tabelle aus. Ganz konkret geht es um die Spalten E, F, L und M.
E soll mit L und F mit M verglichen werden. In diesem Fall müssten die Zeilen 3, 5, und 6 kopiert werden, da in diesen Zeilen Unterschiede zwischen den genannten Spalten bestehen.
Zeilen in denen ein Minuszeichen in den Spalten L und M stehen, sollen nicht kopiert werden. Das Gleiche gilt, wenn die Einträge in Spalte E und F mit L und M identisch sind, so wie in Zeile 7.
Vielen Dank und viele Grüße
Tommy
Anzeige
AW: VBA - Spalten vergleichen
20.08.2019 11:49:08
Regina
ok, Du hattest von anderen Spalten gechrieben, dann kann das natürlich nicht passen.
Tipp: Die zweite Komponenten des Cells-Objektes gibt die Spaltennummer an.
Versuchs mal so:
Sub vergleicheSpalten()
'Variablen definieren
Dim i As Long
Dim last As Long
Dim neu As Long
Dim obj_wks As Worksheet
'Werte zuweisen
Set obj_wks = ActiveSheet
last = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row
neu = last + 1
With obj_wks
For i = 2 To last
If Len(.Cells(i, 12)) > 1 Then
If (.Cells(i, 5)  .Cells(i, 12)) Or (.Cells(i, 6)  .Cells(i, 13)) Then
.Rows(i).Copy Cells(neu, 1)
.Range("A" & neu & ":D" & neu).Interior.ColorIndex = 3
neu = neu + 1
End If
End If
Next
End With
End Sub
gruß
Regina
Anzeige
AW: VBA - Spalten vergleichen
20.08.2019 12:48:41
Tommy
Oh man, danke für die schnelle und kompetente Hilfe. Das ist wirklich nett! Das Makro tut genau das, was es tun soll.
Gibt es aber eine Möglichkeit die jeweils kopierte Zeile direkt unter die zu kopierende Zeile einzufügen und nicht alle Einträge ans Ende der Tabelle?
Grüße
Tommy
AW: VBA - Spalten vergleichen
20.08.2019 12:46:01
Daniel
da stellt sich natürlich erstmal die Frage, warum du in der Anfrage von den Spalten A-D sprichst, obwohl es in deiner Datei die Spalten E/F und L/M sind.
Wenn du das für deine Anfrage abänderst, dann muss dir doch klar sein, dass du dann diese Änderung wieder rückgängig machen musst, wenn du die Antwort in deine Datei einbaust, denn der der dir die Antwort gegeben hat, geht ja von den Spalten A-D aus und schreibt seinen Code entsprechen.
ich würde hier etwas anders vorgehen und zunächst einmal per FORMEL die zu kopierenden Zeilen markieren.
dann kannst du diese Zeile auswählen und am Ende einfügen.
Sub test()
With ActiveSheet.UsedRange
With .Columns(.Columns.Count + 1)
.FormulaR1C1 = "=IF(RC12=""-"","""",IF(COUNTIFS(C5,RC12,C6,RC13)=0,1,""""))"
.Formula = .Value
.Cells(1, 1).ClearContents
If WorksheetFunction.Sum(.Cells) > 1 Then
With Intersect(Range(Columns(1), .Offset(0, -1)), _
.SpecialCells(xlCellTypeConstants, 1).EntireRow)
.Interior.Color = vbGreen
.Copy
Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteAll
End With
End If
.EntireColumn.ClearContents
End With
End With
End Sub
wenn sich die Spalten bei dir nochmal ändern, dann musst du hierzu die Spaltennummern in der Formel anpassen (die Zeile mit .FormulaR1C1). Die Spaltennummern sind die Zahlen nach dem "C"
Gruß Daniel
Anzeige
AW: VBA - Spalten vergleichen
20.08.2019 13:02:23
Tommy
Ja, sorry. Das mit den Spalten war mein Fehler. Wollte es einfach formulieren und dann selbst den Code modifizieren. Hat nicht ganz hingehauen.
Vielen Dank für deinen Lösungsvorschlag. Auch der funktioniert und den finde ich auch etwas eleganter. Da stellt sich mir nur auch die gleiche Frage, ob man die kopierte Zeile direkt unter die zu kopierende Zeile einfügen kann?
Gruß
Tommy
AW: VBA - Spalten vergleichen
20.08.2019 13:19:36
Daniel
Ja, kann man
man muss dann eine zusätzliche Spalte mit den Zeilennummern hinzufügen, damit dann die am Ende eingefügten Zeilen an die richtige Position sortieren kann.
Sortieren geht am schnellsten:
Sub test()
With ActiveSheet.UsedRange
With .Columns(.Columns.Count + 1).Resize(, 2)
.Columns(1).Formula = "=Row()"
.Columns(2).FormulaR1C1 = "=IF(RC12=""-"","""",IF(COUNTIFS(C5,RC12,C6,RC13)=0,1,""""))"
.Formula = .Value
.Cells(1, 2).ClearContents
If WorksheetFunction.Sum(.Columns(2)) > 1 Then
With Intersect(.Columns(2).SpecialCells(xlCellTypeConstants, 1).EntireRow, _
ActiveSheet.UsedRange)
.Copy
Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteAll
End With
Selection.Interior.Color = vbGreen
ActiveSheet.UsedRange.Sort key1:=.Cells(1, 1), order1:=xlAscending, Header:=xlYes
End If
.EntireColumn.ClearContents
End With
End With
End Sub

Gruß Daniel
Anzeige
AW: VBA - Spalten vergleichen
21.08.2019 07:36:44
Tommy
Vielen Dank für deine Hilfe, Daniel.
ich habe versucht deine Sortierfunktion in die Lösung von Regina einzubauen. Er sortiert die Zeile zwar an die richtige Stelle, aber er fügt sie zu oft ein und ich verstehe nicht warum. Kannst du mir sagen, wie man die Funktion korrekterweise in ihre Lösung einbauen kann?
Gruß
Tommy
AW: VBA - Spalten vergleichen
22.08.2019 12:32:38
Tommy
Ich habe es bisher vergeblich versucht und leider nicht geschafft, die Sortierfunktion im Code von Regina korrekt zum Laufen zu bekommen. Über eine kleine Hilfe bzw. Denkanstoß würde ich mich auch freuen. Vielen Dank schon mal.
Gruß
Tommy
AW: VBA - Spalten vergleichen
25.08.2019 08:00:51
Hajo_Zi
Hallo Tommy,
nur wenige schauen auf Deinen Rechner und sehen die Datei mit dem Coide von Regina und Deine Versuche..
Ich möchte gerne den Fehler im Original sehen.
Ich baue keine Datei nach. Die Zeit hat schon jemand investiert.
Ein Nachbau sieht meist anders aus als das Original. Darum sollte das Original verlinkt werden.
Wenn du an Stelle einer Demomappe deine Originalmappe hochladen willst, diese aber sensible Daten enthält, kannst du diese Daten anonymisieren bzw. pseudonymisieren.
Benutze hier im Forum die Funktion zum hochladen. Falls Du die nicht benutzen möchtest beachte, von unsicheren Servern wie z.B. www.file-upload.net lade ich keine Datei runter. (lt. Einschätzung meines Virenprogramms)

Beiträge von Werner, Luc, robert, J.O.Maximo und folgende lese ich nicht.
Die Beiträge werden auch ignoriert, es erfolgt keine Antwort.
Anzeige
AW: VBA - Spalten vergleichen
26.08.2019 09:59:38
Tommy
Hallo Hajo,
danke für deine Antwort. Du hast natürlich recht und die Hinweise habe ich zur Kenntnis genommen und umgesetzt. Ich habe mich nach der Anleitung gerichtet und die Originalmappe mit dem nicht funktionierendem Makro anonymisiert und hochgeladen. Die Datei ist unter folgendem Link zu finden:
https://www.herber.de/bbs/user/131618.xlsm
Gruß
Tommy
AW: VBA - Spalten vergleichen
26.08.2019 12:40:04
Regina
Hi Tommy,
die Sortierung muss aus der Schleife raus, probier mal so:
Sub vergleicheSpalten()
'Variablen definieren
Dim i As Long
Dim last As Long
Dim neu As Long
Dim obj_wks As Worksheet
'Werte zuweisen
Set obj_wks = ActiveSheet
last = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row
neu = last + 1
With obj_wks
For i = 2 To last
If Len(.Cells(i, 12)) > 1 Then
If (.Cells(i, 5)  .Cells(i, 12)) Or (.Cells(i, 6)  .Cells(i, 13)) Then
.Rows(i).Copy Cells(neu, 1)
.Range("A" & neu & ":R" & neu).Interior.ColorIndex = 6
neu = neu + 1
End If
Selection.Interior.ColorIndex = 6
End If
Next
.UsedRange.Sort key1:=.Cells(1, 1), order1:=xlAscending, Header:=xlYes
End With
End Sub
Gruß
Regina
Anzeige
AW: VBA - Spalten vergleichen
27.08.2019 09:20:06
Tommy
Hallo Regina,
das funktioniert schon wesentlich besser als das, was ich bisher zustande gebracht habe. Ich habe nur noch eine Frage dazu.
In Spalte A steht ja das Datum und wenn bspw. der 01.08.2019 Einträge über acht Zeilen hat, und von diesen acht Zeilen lediglich die erste Zeile kopiert werden soll, dann kopiert er diese und fügt sie jetzt nicht mehr ans Ende der Tabelle hinzu, sondern immer ans Ende des jeweiligen Tages. Das passiert für alle Tage identisch, egal wie viel kopiert werden soll, die Kopien eines betroffenen Tages werden zusammengefasst ans Ende des jeweiligen Tages angefügt. Ich versuche aber, dass jede kopierte Zeile direkt unter die zu kopierende Zeile eingefügt wird.
Mit dem Code von Daniel hat das Sortieren ganz gut funktioniert, aber irgendwie läuft der Code leider sonst nicht so rund bei mir und würde lieber bei deinem bleiben, da er stabiler läuft.
Gruß
Tommy
Anzeige
AW: VBA - Spalten vergleichen
27.08.2019 11:35:24
Regina
Hi, guke ich mir heute abend mal na. Mit der normalen Sortierfunktion wird das dann nichts,
Gruß
Regina
AW: VBA - Spalten vergleichen
27.08.2019 15:07:28
Regina
Hi,
schau mal, ob das so passt:
Sub vergleicheSpalten()
'Variablen definieren
Dim i As Long
Dim last As Long
Dim neu As Long
Dim obj_wks As Worksheet
'Werte zuweisen
Set obj_wks = ActiveSheet
last = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row
With obj_wks
For i = 2 To last
If Len(.Cells(i, 12)) > 1 Then
If (.Cells(i, 5)  .Cells(i, 12)) Or (.Cells(i, 6)  .Cells(i, 13)) Then
.Rows(i + 1).Insert Shift:=xlDown
neu = i + 1
.Rows(i).Copy Cells(neu, 1)
.Range("A" & neu & ":R" & neu).Interior.ColorIndex = 6
i = i + 1
End If
End If
Next
End With
End Sub
Gruß Regina
Anzeige
AW: VBA - Spalten vergleichen
27.08.2019 15:41:56
Tommy
Hi,
es ist fast perfekt, aber irgendwie ignoriert das Makro die letzte Zeile der Tabelle und kopiert sie nicht, obwohl sie kopiert werden müsste. Weißt du, woran das liegen könnte?
Auf jeden Fall schon mal ein großes Dank an euch alle, insbesondere an dich, Regina!
Gruß
Tommy
AW: VBA - Spalten vergleichen
27.08.2019 16:40:14
Regina
Ahhhh....
weil Zeilen zwischendurch eingefügt werden, verschiebt sich last.
Sollte so gehen:
Sub vergleicheSpalten()
'Variablen definieren
Dim i As Long
Dim last As Long
Dim neu As Long
Dim obj_wks As Worksheet
'Werte zuweisen
Set obj_wks = ActiveSheet
last = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row
i = 2
With obj_wks
Do Until i > last
If Len(.Cells(i, 12)) > 1 Then
If (.Cells(i, 5)  .Cells(i, 12)) Or (.Cells(i, 6)  .Cells(i, 13)) Then
.Rows(i + 1).Insert Shift:=xlDown
neu = i + 1
.Rows(i).Copy Cells(neu, 1)
.Range("A" & neu & ":R" & neu).Interior.ColorIndex = 6
i = i + 1
last = last + 1
End If
End If
i = i + 1
Loop
End With
End Sub
Gruß
Regina
AW: VBA - Spalten vergleichen
27.08.2019 17:15:25
Tommy
Jetzt funktioniert es so, wie es soll! Danke! :)
Gruß
Tommy

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige