easy4breezy
Goto Top

Excel Makro VBA Sortierung nach Spaltennamen

Hi Leute,

ich habe mich hier schon eingelesen und auch im Internet, aber irgendwie komme ich zu keiner Lösung..

Ich habe zwei verschiedene Excel Dokumente.

Diese bestehen aus Datensätzen von Kunden und was sie gekauft haben.
Jedes Dokument hat unterschiedliche Überschiften, z.B. bei Dokument 1 steht Vorname, bei dem 2. First Name.
Jetzt möchte ich aber, dass bei einer Makro Ausführung die Überschrift an sich erhalten bleibt und trotzdem die Reihenfolge identisch bleibt.
D.h. es müsste nach der Spalte mit Last Name suchen und die nach links oder rechts verschieben. Und wenn es eben Last Name nicht findet, soll es das eben mit Nachname machen.
Ich habe aber noch Vorname und First Name und Produkt und Application und zu guter Letzt E-Mail und Email Adress.

Das müsste es eben automatisch sortieren ohne dass ich etwas auswählen oder tippen muss.

Z.B. E-Mail muss von dem einen Dokument von Spalte 3 nach 1 verschoben werden und in dem anderen von 5 nach 1.

Ich hoffe es kann mir dabei jemand helfen! face-smile

Vielen Dank und liebe Grüße!

Content-ID: 283658

Url: https://administrator.de/contentid/283658

Ausgedruckt am: 26.11.2024 um 11:11 Uhr

116301
Lösung 116301 23.09.2015, aktualisiert am 24.09.2015 um 13:32:34 Uhr
Goto Top
Hallo easy4breezy!

Sollte in etwa so gehen:
Option Explicit
Option Compare Text

Const RowHeader = 1     'Zeilennummer Überschriften  

'Soll-Spaltenreihenfolge deutsch/englisch (ab Spalte1) entsprechend anpassen  
Const StrHeader = "Vorname/First Name|Nachname/Last Name|Produkt/Application|E-Mail/Email Address"  

Sub SortColumns()
    Dim arrHeader As Variant, rngHeader As Range, c As Integer, i As Integer
    
    arrHeader = Split(StrHeader, "|")  
    
    For i = 0 To UBound(arrHeader)
        For c = 0 To Cells(RowHeader, "A").CurrentRegion.Columns.Count - 1  
            Set rngHeader = Cells(RowHeader, "A").Offset(0, c)  
        
            If InStr(arrHeader(i), rngHeader.Value) > 0 Then
                If i <> c Then
                    Columns(rngHeader.Column).Cut
                    Columns(i + 1).Insert Shift:=xlToRight
                End If
                Exit For
            End If
        Next
    Next
End Sub

Grüße Dieter
easy4breezy
easy4breezy 24.09.2015 um 13:35:05 Uhr
Goto Top
Wow, vielen Dank!
Wie auch immer das funktioniert, es funktioniert einfach face-smile
Ich fange gerade an mit dem Thema, aber das ist schon mal cool face-smile

Jetzt habe ich nur noch ein Problem:

In einer der beiden Listen sind in den ersten 9 Zeilen Informationen, die für meine Auswertungen irrelevant sind.
Jetzt könnte ich diese natürlich vorher manuell löschen, aber automatisiert wäre das natürlich noch besser.

Weißt du auch wie das funktioniert?

Liebe Grüße und nochmals vielen Dank!
114757
114757 17.10.2015 um 18:40:28 Uhr
Goto Top
In einer der beiden Listen sind in den ersten 9 Zeilen Informationen, die für meine Auswertungen irrelevant sind.
Range("1:9").Delete  
Gruß jodel32