Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1380to1384
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

Mit VBA sortieren, wenn Spalte nicht ortsgebunden

Mit VBA sortieren, wenn Spalte nicht ortsgebunden
12.09.2014 09:22:23
Urs
Guten Morgen
Mit dem Makrorecorder habe ich das untenstehend Skript aufgenommen.
  • Sub IEC_3()
    Cells.Select
    ActiveWorkbook.Worksheets("Artikelübersicht").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Artikelübersicht").Sort.SortFields.Add Key:=Range( _
    "AW2:AW52"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
    xlSortNormal 'Inhalt von AW1 ist: "IEC-Wi......."
    ActiveWorkbook.Worksheets("Artikelübersicht").Sort.SortFields.Add Key:=Range( _
    "I2:I52"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
    xlSortNormal 'Inhalt von I1 ist: "Lage 1"
    With ActiveWorkbook.Worksheets("Artikelübersicht").Sort
    .SetRange Range("A1:AX52")
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
    End With
    Selection.AutoFilter
    End Sub
    


  • Nun meine Fragen dazu:
    1. Sortierung nach Kolonne I: Wie muss ich die Syntax abändern, dass nicht nach Kolonne AW gesucht wird sondern nach der Kolonne die in der 1. Zeile "Lage 1" stehen hat?
    2. Sortierung nach Kolonne AW: Wie muss ich die Syntax abändern, dass nicht nach Kolonne AW gesucht wird sondern nach der Kolonne die in der 1. Zeile mit folgenden 3 Buchstaben beginnt "IEC"?
    3. Im Beispiel heisst das aktive Worksheet ("Artikelübersicht"). Was muss ich in der Syntax ändern, wenn ich einfach vonm aktiven Worksheet starte?
    Danke jetzt schon für Eure Hilfe. Gruss Urs

    6
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: Mit VBA sortieren, wenn Spalte nicht ortsgebunden
    12.09.2014 09:41:14
    Daniel
    Hi
    zu 1)...Sort.SortFields.Add Key:=Rows(1).Find(What:="Lage 1", lookat:=xlwhole, lookin:=xlvalues)
    zu 2)...Sort.SortFields.Add Key:=Rows(1).Find(What:="IEC*", lookat:=xlwhole, lookin:=xlvalues)
    zu 3) Ersetze ActiveWorkbook.Worksheets("Artikelübersicht") durch ActiveSheet
    Gruß Daniel

    Danke :-) mit Nachfrage
    12.09.2014 11:12:47
    Urs
    Hallo Daniel
    Was Du mir da zur Verfügung gestellt hast ist super. Es funktioniert. :-) Danke
    Ich hätte aber gleich noch eine 4. Frage stellen sollen:
    4. Wie muss ich den Range definieren, wenn er jedesmal wechseln kann? Also auch ("A1:KZ64000") sein könnte
  • .SetRange Range("A1:AX52")

  • Gruss Urs

    Anzeige
    AW: Danke :-) mit Nachfrage
    12.09.2014 11:43:34
    Daniel
    Hi
    wenn du alle Zellen auf dem Blatt sortieren willst:
    .SetRange ActiveSheet.UsedRange
    Gruß Daniel

    AW: Danke :-) mit Nachfrage
    12.09.2014 12:01:44
    Urs
    Hallo Daniel vielen Dank !

    AW: Danke :-) mit Nachfrage
    12.09.2014 12:01:09
    fcs
    Hallo Urs,
    nachdem ich mit deinem Problem auch beschäfftig habe hier auch meine Lösung.
    Ähnlich wie Daniels, zusätzlich sind Prüfungen eingebaut, wenn die gesuchten Spalten nicht vorhanden sind oder nicht sortiert werden kann.
    Gruß
    Franz
    Sub IEC_3()
    Dim wks As Worksheet
    Dim SpaLage As Long, SpaIEC As Long, ZeileL As Long
    Dim rngZelle As Range, varFind As Variant
    Set wks = ActiveSheet
    With wks
    If .AutoFilterMode = True Then
    .AutoFilterMode = False
    End If
    varFind = "Lage 1"
    Set rngZelle = .Rows(1).Find(what:=varFind, LookIn:=xlValues, lookat:=xlWhole)
    If rngZelle Is Nothing Then
    MsgBox "Spalte mit """ & varFind & """ nicht gefunden"
    Else
    SpaLage = rngZelle.Column
    varFind = "IEC"
    Set rngZelle = .Rows(1).Find(what:=varFind & "*", LookIn:=xlValues, lookat:=xlWhole)
    If rngZelle Is Nothing Then
    MsgBox "Spalte mit """ & varFind & """ nicht gefunden"
    Else
    SpaIEC = rngZelle.Column
    With .UsedRange
    ZeileL = .Row + .Rows.Count
    End With
    If ZeileL > 2 Then
    .Sort.SortFields.Clear
    .Sort.SortFields.Add Key:=.Cells(1, SpaIEC), SortOn:=xlSortOnValues, _
    Order:=xlDescending, DataOption:=xlSortNormal _
    'Inhalt von AW1 ist: "IEC-Wi......."
    .Sort.SortFields.Add Key:=.Cells(1, SpaLage), SortOn:=xlSortOnValues, _
    Order:=xlAscending, DataOption:=xlSortNormal _
    'Inhalt von I1 ist: "Lage 1"
    With .Sort
    .SetRange wks.Range(wks.Cells(1, 1), wks.Cells(ZeileL, 50)) '50=Spalte AX
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
    End With
    End If
    .Range(.Cells(1, 1), .Cells(ZeileL, 50)).AutoFilter
    End If
    End If
    End With
    End Sub
    

    Anzeige
    AW: Danke :-) mit Nachfrage
    12.09.2014 12:11:34
    Urs
    Hallo Franz
    Auch Dir vielen Dank für Deine aufwendige Version. Ich werde sie mir als VBA Studie zu Gemüte führen und sie bei Bedarf anwenden.
    Schönes Wochenende. Gruss Urs

    302 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige