Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1488to1492
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

Makro Sortierung wenn Bedingung erfüllt

Makro Sortierung wenn Bedingung erfüllt
21.04.2016 14:32:33
Banana
Liebes Forum,
ich brauche ein Makro, welches einen Bereich sortiert, wenn in Spalte B ein bestimmter Name auftaucht. Hier einmal grob der Aufbau:
Spalte B Spalte C
Name1 ....
Name1
Name1
Name2
Name2
Name2
Die eigentliche Sortierung bekomme ich hin, da ich dieses aufgezeichnet habe. Jedoch will ich jetzt definieren, welcher Bereich genau sortiert werden soll.
Meine Überlegung war den Bereich so einzugrenzen:
Dim lrow As Integer
Dim frow as integer
frow = Cells.Find("Name2").Row
lrow = Cells.Find("Name2"),SearchOrder:=xlByRows,SearchDirection:=xlPrevious).Row
Range("C" & frow & ":I" & lrow).Select
Selection.AutoFilter
....
Das heisst der erste (frow) und der letzte Eintrag(lrow) von Name2 soll gefunden werden und dann der Bereich dazwischen ausgewählt werden.
Leider klappt es nicht so gut, es wird immer ein vollkommen anderer Bereich ausgewählt.
Könnt ihr mir helfen?
Viele Grüße, Banana

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro Sortierung wenn Bedingung erfüllt
21.04.2016 15:01:05
ChrisL
Hi Banane
Sub Mach()
Call SortierMich("Name2")
End Sub


Private Sub SortierMich(sName As String)
Dim lrow As Integer
Dim frow As Integer
frow = Application.Match(sName, Columns(2), 0)
lrow = Application.Match(sName, Columns(2))
With ActiveSheet.Sort
.SortFields.Clear
.SortFields.Add Key:=Cells(frow, 3), _
SortOn:=xlSortOnValues, Order:=xlAscending
.SetRange Range(Cells(frow, 3), Cells(lrow, 9))
.Header = xlNo
.Apply
End With
End Sub

cu
Chris

AW: Makro Sortierung wenn Bedingung erfüllt
21.04.2016 15:53:56
Daniel
HI
du solltest bei .Sort immer die benötigten Parameter angeben, weil Excel sich die Einstellungen merkt und bei nicht angegebenen Parameteren die zuletzt verwendeten einsetzt.
Dh wenn du den Code 2x hintereinander ausführst, wird auch dein frow mit "SearchDirection:=xlprevious" gesucht.
ausserdem ist im Code noch ein Klammerfehler drin, den dir der Editor um die Ohren hauen müsste (und wenn man davon ausgeht, dass du den Code ja mit Copy-Paste übernehmen kannst und nicht abschreiben musst)
was weiter auffällt: du sprichst vom Sortieren und setzt den Autofilter.
wozu? sortieren kann man auch ohne Autofilter.
beachte, dass der Autofilter die erste Zeile als Überschrift verwendet, dh du müsstest dann frow eine Zeile oberhalb der ersten Fundstelle platzieren, wenn du den Autofilter für diesen Bereich einrichtest.
Die Sortierfunktion kann mit und ohne Überschrift arbeiten, zum Sortieren wäre es so ok.
desweitern ist es so, dass du den ganzen Zellbereich nach "Name2" durchsuchst und nicht nur Spalte B.
wenn also der Name noch an anderer stelle in der Tabelle vorkommt (auch als Teiltext, weil du in der Suchfunktion nicht explizit vorgegeben hast, dass der ganze Zellinhalt verglichen werden soll), dann brauchst du dich nicht wundern, wenn "irgendein" Bereich ausgewählt wird.
besser so:
Dim lrow As Integer
Dim frow as integer
frow = Columns(2).Find("Name2", lookIn:=xlvalues, lookat:=xlwhole, searchdirection:=xlnext). _
Row
lrow = Columns(2).Find("Name2", lookIn:=xlvalues, lookat:=xlwhole, SearchDirection:=xlPrevious) _
.Row
Range("C" & frow & ":I" & lrow).Select
Selection.AutoFilter

gruß Daniel
Anzeige

348 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige