Mit VBA sortieren, wenn Spalte nicht ortsgebunden
Betrifft: Mit VBA sortieren, wenn Spalte nicht ortsgebunden
von: Urs
Geschrieben am: 12.09.2014 09:22:23
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
Betrifft: AW: Mit VBA sortieren, wenn Spalte nicht ortsgebunden
von: Daniel
Geschrieben am: 12.09.2014 09:41:14
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
Betrifft: Danke :-) mit Nachfrage
von: Urs
Geschrieben am: 12.09.2014 11:12:47
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
Betrifft: AW: Danke :-) mit Nachfrage
von: Daniel
Geschrieben am: 12.09.2014 11:43:34
Hi
wenn du alle Zellen auf dem Blatt sortieren willst:
.SetRange ActiveSheet.UsedRange
Gruß Daniel
Betrifft: AW: Danke :-) mit Nachfrage
von: Urs
Geschrieben am: 12.09.2014 12:01:44
Hallo Daniel vielen Dank !
Betrifft: AW: Danke :-) mit Nachfrage
von: fcs
Geschrieben am: 12.09.2014 12:01:09
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
 |
Betrifft: AW: Danke :-) mit Nachfrage
von: Urs
Geschrieben am: 12.09.2014 12:11:34
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
Beiträge aus den Excel-Beispielen zum Thema "Mit VBA sortieren, wenn Spalte nicht ortsgebunden"