Excel Spalten vergleichen und sortieren - VBA?
Hallo liebe VBA Profis,
Ich muss innerhalb eines Excel-Sheets Spalten vergleichen und sortieren. Das ganze gestaltet sich folgendermassen:
Spalte A-C enthält jeweils Artikelnummer, Artikelbezeichnung, neuer Preis.
Spalte D-F enthält jeweils Artikelnummer, Artikelbezeichnung, ALTER PREIS.
Das Problem ist, dass die Positionierung der Artikel von Spalte A-C nicht dieselbe ist wie in Spalte D-F.
Nun muss Spalte D-F genauso sortiert werden in Bezug auf Artikelnummer und Artikelbezeichnung wie die Spalten A-C und Spalte F soll natürlich weiterhin den alten Preis enthalten zu dem richtigen Produkt.
Als Beispiel:
Artikelnummer: 123
Artikelbezeichnung: Tasse
ALTER PREIS: 5.-
Der Preis über 5.- Euro soll natürlich nach der Sortierung weiterhin bei der Tasse stehen und nicht etwa beim Teller.
Spalten A-C dürfen auf gar keinen Fall geändert werden.
Die Artikelnummern sind dieselben in A-C und D-F, mit wenigen Ausnahmen, die es in A-C entweder nicht mehr oder neu dazu gibt.
In diesen Fällen soll Spalten D-F wie folgt geändert werden:
- Produkt gibt es nicht in A-C: Das Produkt in D-F löschen, und zwar die Zellen nicht die ganze Zeile und die Zellen darunter sollen nach oben geschoben werden.
- Produkt gibt es nicht in D-F: Das Produkt in D-F einfügen durch einfügen von Zellen nicht die ganze Zeile und die darunter liegenden Zellen sollen nach unten geschoben werden.
Im Dokument sind maximal ungefähr 2000 Zeilen.
Nun habe ich leider keinerlei Kenntnisse in Visual Basic und müsste aber ein solches Makro erstellen, was doch eigentlich gehen müsste?
Kann mir vielleicht jemand von euch da weiterhelfen?
Vielen Dank
Ich muss innerhalb eines Excel-Sheets Spalten vergleichen und sortieren. Das ganze gestaltet sich folgendermassen:
Spalte A-C enthält jeweils Artikelnummer, Artikelbezeichnung, neuer Preis.
Spalte D-F enthält jeweils Artikelnummer, Artikelbezeichnung, ALTER PREIS.
Das Problem ist, dass die Positionierung der Artikel von Spalte A-C nicht dieselbe ist wie in Spalte D-F.
Nun muss Spalte D-F genauso sortiert werden in Bezug auf Artikelnummer und Artikelbezeichnung wie die Spalten A-C und Spalte F soll natürlich weiterhin den alten Preis enthalten zu dem richtigen Produkt.
Als Beispiel:
Artikelnummer: 123
Artikelbezeichnung: Tasse
ALTER PREIS: 5.-
Der Preis über 5.- Euro soll natürlich nach der Sortierung weiterhin bei der Tasse stehen und nicht etwa beim Teller.
Spalten A-C dürfen auf gar keinen Fall geändert werden.
Die Artikelnummern sind dieselben in A-C und D-F, mit wenigen Ausnahmen, die es in A-C entweder nicht mehr oder neu dazu gibt.
In diesen Fällen soll Spalten D-F wie folgt geändert werden:
- Produkt gibt es nicht in A-C: Das Produkt in D-F löschen, und zwar die Zellen nicht die ganze Zeile und die Zellen darunter sollen nach oben geschoben werden.
- Produkt gibt es nicht in D-F: Das Produkt in D-F einfügen durch einfügen von Zellen nicht die ganze Zeile und die darunter liegenden Zellen sollen nach unten geschoben werden.
Im Dokument sind maximal ungefähr 2000 Zeilen.
Nun habe ich leider keinerlei Kenntnisse in Visual Basic und müsste aber ein solches Makro erstellen, was doch eigentlich gehen müsste?
Kann mir vielleicht jemand von euch da weiterhelfen?
Vielen Dank
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 184576
Url: https://administrator.de/forum/excel-spalten-vergleichen-und-sortieren-vba-184576.html
Ausgedruckt am: 20.04.2025 um 21:04 Uhr
8 Kommentare
Neuester Kommentar

Hallo CorinnaM!
Sind die Spalten G:I Leer?
Gruß Dieter
Sind die Spalten G:I Leer?
Gruß Dieter
Moin CorinnaM,
willkommen im Forum.
Selbst wenn die Spalten G ff nicht leer sind (was ich annehme) ->falls es keine regelmäßige Aktion ist, sondern etwas Einmaliges, dann mach es mit SVERWEIS().
Kopiere dazu die Spalten D-F in ein neues Tabellenblatt, ersetze die Spalten D-F im "richtigen" Sheet durch SVerweis()-Formeln und ersetze dann diese Spalten mit "Kopieren"/"Inhalte einfügen"/"Werte".
Das hast du bei den paar Daten in 10 Minuten fertig - in der Zeit hat nicht mal didi ein Makro zusammengebraten,
->Würde sich nur lohnen, wenn es eine regelmäßige Aktion wäre, aber dann würde sich die Frage stellen, durch welchen Zaubertrick denn die Spalteninhalte D-F in das Sheet gebeamt werden...
Grüße
Biber
willkommen im Forum.
Selbst wenn die Spalten G ff nicht leer sind (was ich annehme) ->falls es keine regelmäßige Aktion ist, sondern etwas Einmaliges, dann mach es mit SVERWEIS().
Kopiere dazu die Spalten D-F in ein neues Tabellenblatt, ersetze die Spalten D-F im "richtigen" Sheet durch SVerweis()-Formeln und ersetze dann diese Spalten mit "Kopieren"/"Inhalte einfügen"/"Werte".
Das hast du bei den paar Daten in 10 Minuten fertig - in der Zeit hat nicht mal didi ein Makro zusammengebraten,
->Würde sich nur lohnen, wenn es eine regelmäßige Aktion wäre, aber dann würde sich die Frage stellen, durch welchen Zaubertrick denn die Spalteninhalte D-F in das Sheet gebeamt werden...
Grüße
Biber

Hallo CorinnaM!
@Biber

Versuchs mal hiermit:
Unter der Annahme, dass die Daten bereits in die Spalten D:F kopiert wurden, den Quellcode im VB-Editor in ein Modul einfügen und über die Excel-Oberfläche (Extras>Makros...) starten.
Funktion:
ArtikelNr von Spalte A in Spalte D suchen und falls gefunden, die Spalten D:F in die Spalten G:I (Zeile von A) kopieren. Anschließend die Spalten D:F löschen.
Gruß Dieter
@Biber
Das hast du bei den paar Daten in 10 Minuten fertig - in der Zeit hat
nicht mal didi ein Makro zusammengebraten, ...
Solange hat's - wie am Code zu sehen ist - nicht gedauertnicht mal didi ein Makro zusammengebraten, ...
Versuchs mal hiermit:
Option Explicit
Private Const SheetName = "Tabelle1" 'Tabellenname entsprechend anpassen
Private Const StartZeile = 2 'Artikelnummer ab Zeile ?
Sub SortToArtikelNr()
Dim Found As Range, i As Long
With Sheets(SheetName)
For i = StartZeile To .Cells(.Rows.Count, "A").End(xlUp).Row
Set Found = .Columns("D").Find(.Cells(i, "A").Value, LookIn:=xlValues, LookAt:=xlWhole)
If Not Found Is Nothing Then
Found.Resize(1, 3).Copy .Cells(i, "G")
End If
Next
.Columns("D:F").Delete
End With
End Sub
Funktion:
ArtikelNr von Spalte A in Spalte D suchen und falls gefunden, die Spalten D:F in die Spalten G:I (Zeile von A) kopieren. Anschließend die Spalten D:F löschen.
Gruß Dieter

Hallo CorinnaM!

Noch einen schönen Tag!
Gruß Dieter
Juhuuuu! das funktioniert! juhuuu! super! vielen vielen lieben Dank! Du hast soeben mein Leben erleichtert! juhuu!
Vielen Dank Dieter! *vor Freude umherspring*
Jepp, gern geschehen. Deinen Freudentanz hätte ich ja zu gerne gesehenVielen Dank Dieter! *vor Freude umherspring*
Noch einen schönen Tag!
Gruß Dieter
Moin didi1954 und CorinnaM,

Es gibt eine Menge kohlenstoffbasierte Codegeneratoren z.B. in unserer Firma, denen jedes dieser Qualitätskriterien auf immer unerreichbar bleiben wird.
Wenn es denn nun ein regelmäßiger Ablauf/Geschäftsprozess ist (jeden Monat) wieder, dann würde ich empfehlen, den manuellen Vorlaufschritt "Kopieren der drei Spalten D-F" auch noch wegzuautomatisieren.
Das Makro könnte - mit drei weiteren Zeilen + Sicherheitsabfrage - auf Knopfdruck auch diese drei Spalten aus einer zweiten Exceldatei lesen, die jeden Monat wieder unter dem gleichen Namen (oder Namensprefix+Datumsendung) wie zum Beispiel "Preise_2012-06.xls" in einem Verzeichnis X:\Austausch" bereitgestellt wird.
@Didi: Du würdest doch bestimmt gerne noch einmal einen so schönen..ääh .... Freudentanz provozieren, oder?
Grüße
Biber
Zitat von @76109:
Solange hat's - wie am Code zu sehen ist - nicht gedauert
Na ja, ich finde zwei Zeilen Code pro Minute UND einen Kommentar pro 10 Zeilen Code schon eine durchaus respektable Leistung Solange hat's - wie am Code zu sehen ist - nicht gedauert
Es gibt eine Menge kohlenstoffbasierte Codegeneratoren z.B. in unserer Firma, denen jedes dieser Qualitätskriterien auf immer unerreichbar bleiben wird.
> Juhuuuu! das funktioniert! juhuuu! super! vielen vielen lieben Dank! Du hast soeben mein Leben erleichtert! juhuu!
> Vielen Dank Dieter! *vor Freude umherspring*
Jepp, gern geschehen. Deinen Freudentanz hätte ich ja zu gerne gesehen
Jepp, so was Schönes hatte ich auch das letzte Mal in "Harry & Sally" gesehen...> Vielen Dank Dieter! *vor Freude umherspring*
Jepp, gern geschehen. Deinen Freudentanz hätte ich ja zu gerne gesehen
Wenn es denn nun ein regelmäßiger Ablauf/Geschäftsprozess ist (jeden Monat) wieder, dann würde ich empfehlen, den manuellen Vorlaufschritt "Kopieren der drei Spalten D-F" auch noch wegzuautomatisieren.
Das Makro könnte - mit drei weiteren Zeilen + Sicherheitsabfrage - auf Knopfdruck auch diese drei Spalten aus einer zweiten Exceldatei lesen, die jeden Monat wieder unter dem gleichen Namen (oder Namensprefix+Datumsendung) wie zum Beispiel "Preise_2012-06.xls" in einem Verzeichnis X:\Austausch" bereitgestellt wird.
@Didi: Du würdest doch bestimmt gerne noch einmal einen so schönen..ääh .... Freudentanz provozieren, oder?
Grüße
Biber
Hallo Didi,
ich bin auf der Suche nach einer Problemlösung durch Zufall auf dieses Makro gestossen - und muss sagen, dass dieses "kurze" Makro schon nahezu alle meine Probleme gelöst hat.
Lediglich ein Problem bleibt noch:
Wenn jetzt ein Artikel dabei ist, der vorher nicht mit in der Artikelliste aufgeführt war (neuer Artikel), wird dieser Artikel so leider noch nicht berücksichtigt.
Wie müsste ich dieses Makro anpassen, damit ein "neuer" Artikel unten an die Liste angehängt wird.
Spalte "A" ist die "vorhandene" Liste mit Artikelnummern
- In Spalte "B" sortiere ich (mit dem Makro) die aktuelle Liste mit Artikelnummern und
- und in Spalte "C" kommen (auch mit dem Makro) die dazugehörigen Werte (in meinem Fall Verkaufszahlen)
einige Zellen in den Spalten "B" + "C" bleiben leer, da manchmal Artikel vorübergehend oder endgültig rausgenommen werden.
"Neue Artikel" müssen unten angefügt werden (in den Spalten "B" + "C")
Danke im voraus,
Bernd
ich bin auf der Suche nach einer Problemlösung durch Zufall auf dieses Makro gestossen - und muss sagen, dass dieses "kurze" Makro schon nahezu alle meine Probleme gelöst hat.
Lediglich ein Problem bleibt noch:
Wenn jetzt ein Artikel dabei ist, der vorher nicht mit in der Artikelliste aufgeführt war (neuer Artikel), wird dieser Artikel so leider noch nicht berücksichtigt.
Wie müsste ich dieses Makro anpassen, damit ein "neuer" Artikel unten an die Liste angehängt wird.
Spalte "A" ist die "vorhandene" Liste mit Artikelnummern
- In Spalte "B" sortiere ich (mit dem Makro) die aktuelle Liste mit Artikelnummern und
- und in Spalte "C" kommen (auch mit dem Makro) die dazugehörigen Werte (in meinem Fall Verkaufszahlen)
einige Zellen in den Spalten "B" + "C" bleiben leer, da manchmal Artikel vorübergehend oder endgültig rausgenommen werden.
"Neue Artikel" müssen unten angefügt werden (in den Spalten "B" + "C")
Danke im voraus,
Bernd