Microsoft Excel

Herbers Excel/VBA-Archiv

VBA - Sortieren | Herbers Excel-Forum


Betrifft: VBA - Sortieren von: WalterK
Geschrieben am: 31.01.2012 14:25:21

Hallo,

der folgendem Codeteil zum Sortieren wird ausgeführt wenn die Überschrift (Zeile 2) in Spalte A "FAMILIENNAME" und in Spalte C "BEZEICHNUNG" lautet.


 If Cells(2, 1) = "FAMILIENNAME" And Cells(2, 3) = "BEZEICHNUNG" Then
    Range(Cells(3, 1), Cells(Lz, LCol)).Sort Key1:=Range("A3"), Order1:=xlAscending, Key2:= _
Range("C3"), Header:=xlNo, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal
    End If

Allerdings ist es jetzt so, dass diese beiden Überschriften auch in anderen Spalten sein können.

Was muss ich ändern, damit im Code zuerst nach den Überschriften FAMILIENNAME und BEZEICHNUNG in Zeile 2 gesucht wird und dann diese beiden Spalten ab Zeile 3 sortiert werden?

Besten Dank für die Hilfe und Servus, Walter

  

Betrifft: VBA : Flexibles sortieren nach Suchbegriffen von: Herrmann II. oder Reinhard III.
Geschrieben am: 31.01.2012 14:49:58

Hallo Walter,

ich habe dir mal auf die Schnelle ein funktionierendes flexibles Beispiel "gebastelt" :

Sub SortierenNachSuchbegriffen()
    Dim rngC1 As Range, rngC2 As Range
    Dim lZ As Long, lCol As Long
    Dim strSort1 As String, strSort2 As String
    
    strSort1 = "Bezeichnung"    '1. Sortierbegriff (Überschrift)
    strSort2 = "Familienname"   '2. Sortierbegriff (Überschrift)
    
    lZ = [A1].CurrentRegion.Rows.Count      'Zeilenanzahl des Bereiches um A1
    lCol = [A1].CurrentRegion.Columns.Count 'Spaltenanzahl des Bereiches um A1
    
    'Zunächst prüfen, ob die beiden Suchbegriffe in Zeile 2 enthalten sind :
    If Application.CountIf([2:2], strSort1) > 0 And _
        Application.CountIf([2:2], strSort2) > 0 Then
        Set rngC1 = [2:2].Find(strSort1) 'Sucht in Zeile 2 nach 1. Suchbegriff
        Set rngC2 = [2:2].Find(strSort2) 'Sucht in Zeile 2 nach 2. Suchbegriff
       
        Range(Cells(2, 1), Cells(lZ, lCol)).Sort Key1:=rngC1, Order1:=xlAscending, _
            Key2:=rngC2, Header:=xlYes, OrderCustom:=1, MatchCase:=False, _
            Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
    End If
End Sub
Zunächst wird überprüft, ob BEIDE Suchbegriffe in Zeile 2 enthalten sind, falls ja : die Beiden Zellen werden in rngC1 und rngC2 gespeichert und damit sortiert.
Evtl. musst Du die Ermittlung der Zeilen-/Spaltenanzahl (lZ und lCol) noch anpassen.

Gruß, NoNet


  

Betrifft: Nicht Herrmann oder Reinhard, sondern NoNet _oT von: NoNet
Geschrieben am: 31.01.2012 14:58:34

_oT = "ohne Text"


  

Betrifft: Perfekt, Danke Nonet! Servus, Walter_oT von: WalterK
Geschrieben am: 31.01.2012 15:01:03




  

Betrifft: AW: VBA - Sortieren von: Tino
Geschrieben am: 31.01.2012 14:59:13

Hallo,
kannst mal so versuchen.
Tabelle im Code noch anpassen, evtl. noch die letzte Zeile (Lz) und Spalte (LCol) anpassen.

Sub Test()
Dim varColFAMILIENNAME, varColBEZEICHNUNG
Dim Lz&, LCol&

With Tabelle1 'Tabelle anpassen 
    varColFAMILIENNAME = Application.Match("FAMILIENNAME", .Rows(2), 0)
    varColBEZEICHNUNG = Application.Match("BEZEICHNUNG", .Rows(2), 0)
    
    If IsNumeric(varColBEZEICHNUNG) And IsNumeric(varColFAMILIENNAME) Then
        Lz = .UsedRange.Rows(.UsedRange.Rows.Count).Row
        LCol = .UsedRange.Columns(.UsedRange.Columns.Count).Column
        
        If Lz > 2 Then
            .Range(.Cells(3, 1), .Cells(Lz, LCol)).Sort _
            Key1:=.Cells(3, varColFAMILIENNAME), Order1:=xlAscending, Key2:=.Cells(3, varColBEZEICHNUNG), Order2:=xlAscending, _
            Header:=xlNo, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
        End If
    End If
End With

End Sub
Gruß Tino


  

Betrifft: Passt natürlich auch, Danke Tino! Servus Walter von: WalterK
Geschrieben am: 31.01.2012 15:07:30




Beiträge aus den Excel-Beispielen zum Thema "VBA - Sortieren"