Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Excel Spalten vergleichen und sortieren - VBA?

Frage Entwicklung VB for Applications

Mitglied: CorinnaM

CorinnaM (Level 1) - Jetzt verbinden

07.05.2012 um 15:27 Uhr, 12666 Aufrufe, 8 Kommentare

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
Mitglied: 76109
08.05.2012 um 01:11 Uhr
Hallo CorinnaM!

Sind die Spalten G:I Leer?

Gruß Dieter
Bitte warten ..
Mitglied: Biber
08.05.2012 um 06:39 Uhr
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
Bitte warten ..
Mitglied: CorinnaM
08.05.2012 um 08:41 Uhr
Vielen Dank für das herzliche willkommen

Ja die Spalten G:I sind leer und ja das ganze ist eine regelmässige Aktion (monatlich). Im Grunde genommen habe ich 2 Excel Dateien. Eine mit den Preisen vom Vormonat und eine mit den Preisen vom aktuellen Monat, nur ist die Positionierung der Artikel in den Tabellen nicht gleich. Was bis anhin gemacht wurde ist, dass die alte Preisliste in die neue kopiert wurde. Danach wurden die Spalten D-F (alte Preisliste) manuell nach den Spalten A-C sortiert, was nicht nur zeitintensiv sondern auch fehleranfällig ist, daher dachte ich an ein Makro und bin bei dem Versuch schlicht an Visual Basic gescheitert.
Bitte warten ..
Mitglied: 76109
08.05.2012 um 09:36 Uhr
Hallo CorinnaM!

@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 gedauert

Versuchs mal hiermit:
01.
Option Explicit 
02.
 
03.
Private Const SheetName = "Tabelle1"        'Tabellenname entsprechend anpassen 
04.
Private Const StartZeile = 2                'Artikelnummer ab Zeile ? 
05.
 
06.
Sub SortToArtikelNr() 
07.
    Dim Found As Range, i As Long 
08.
     
09.
    With Sheets(SheetName) 
10.
        For i = StartZeile To .Cells(.Rows.Count, "A").End(xlUp).Row 
11.
            Set Found = .Columns("D").Find(.Cells(i, "A").Value, LookIn:=xlValues, LookAt:=xlWhole) 
12.
             
13.
            If Not Found Is Nothing Then 
14.
                Found.Resize(1, 3).Copy .Cells(i, "G") 
15.
            End If 
16.
        Next 
17.
     
18.
       .Columns("D:F").Delete 
19.
    End With 
20.
End Sub 
21.
 
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
Bitte warten ..
Mitglied: CorinnaM
08.05.2012 um 09:53 Uhr
Juhuuuu! das funktioniert! juhuuu! super! vielen vielen lieben Dank! Du hast soeben mein Leben erleichtert! juhuu! Vielen Dank Dieter! *vor Freude umherspring*
Bitte warten ..
Mitglied: 76109
08.05.2012 um 10:16 Uhr
Hallo CorinnaM!

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

Noch einen schönen Tag!

Gruß Dieter
Bitte warten ..
Mitglied: Biber
08.05.2012 um 19:53 Uhr
Moin didi1954 und CorinnaM,

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
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...


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
Bitte warten ..
Mitglied: BerndZ
09.02.2013 um 22:51 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(3)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Outlook & Mail
Importieren von excel daten in outlook vba - Teil 2 (5)

Frage von Bgervais zum Thema Outlook & Mail ...

Microsoft Office
gelöst Importieren von excel daten in outlook vba (10)

Frage von Bgervais zum Thema Microsoft Office ...

Microsoft Office
gelöst Excel Spalten (6)

Frage von a.grothe zum Thema Microsoft Office ...

VB for Applications
gelöst Excel VBA Werte von 2 verschiedenen Sheets vergleichen und aktualisieren (4)

Frage von drimrim zum Thema VB for Applications ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...