"Gelöst" habe ich (dank Makro-aufzeichnen), dass ich die Spalten L, M und G nach einem bestimmten Kriterium filtern und dann die ganze Tabelle unter Berücksichtigung der Spalte H sortieren kann. Nun fehlt mir noch eine Funktion und zwar möchte ich, dass diese nur in den ersten 10 Zeilen der gefilterten Datensätze in Spalte G einen immer gleichen Wert einsetzt (z.B. "AAAAAA") und nur die ersten 10 Zeilen in Tabellenblatt 2 kopiert werden. Beim kopieren hab ich, dachte ich, den Bereich auf 10 Zeilen begrenzt, kommen aber dennoch mehr im Tabellenblatt 2 an.
06.08.2015, 19:48 (Dieser Beitrag wurde zuletzt bearbeitet: 06.08.2015, 19:50 von sandormiles.)
Hier mal der Code, wie ich ihn im Moment habe und zum Testen verwende...
Code:
Private Sub CommandButton1_Click()
'+--------------------------------------------------------------------------------------------------+ '| Filtern über die Autifilter-Option. | '+--------------------------------------------------------------------------------------------------+ '| ErsteZelle = 1. Zelle der zu filternden Datenbank. | '| Spalte = Spaltennummer der Datenbank, in welchem sich das Filterkriterium befindet. | '| FilterKriterium = Filterkriterium nach welcher in der angegebenen Spalte gefiltert werden soll | '+--------------------------------------------------------------------------------------------------+ Range("A3").AutoFilter Field:=12, Criteria1:="<>" Range("A3").AutoFilter Field:=13, Criteria1:="=" Range("A3").AutoFilter Field:=7, Criteria1:="="
'+---------------------------------------------------------------------------------------------+ '| Sortiert Spalte H | '+---------------------------------------------------------------------------------------------+ Columns("H:H").Select ActiveWorkbook.Worksheets("Tabelle1").AutoFilter.Sort.SortFields.Clear ActiveWorkbook.Worksheets("Tabelle1").AutoFilter.Sort.SortFields.Add Key:= _ Range("H2:H10000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _ xlSortNormal With ActiveWorkbook.Worksheets("Tabelle1").AutoFilter.Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With
06.08.2015, 20:07 (Dieser Beitrag wurde zuletzt bearbeitet: 06.08.2015, 20:07 von Steffl.)
Hallo,
(06.08.2015, 14:23)sandormiles schrieb: Nun fehlt mir noch eine Funktion und zwar möchte ich, dass diese nur in den ersten 10 Zeilen der gefilterten Datensätze in Spalte G einen immer gleichen Wert einsetzt (z.B. "AAAAAA") und nur die ersten 10 Zeilen in Tabellenblatt 2 kopiert werden. Beim kopieren hab ich, dachte ich, den Bereich auf 10 Zeilen begrenzt, kommen aber dennoch mehr im Tabellenblatt 2 an.
ich muss gestehen, dass ich die Antwort gerade nicht verstehe.
Falls mein Code zu vermurkst ist, um das gerade zu biegen, vielleicht kann jemand mal anhand einer Musterdatei einen kurzen Code schreiben, damit ich die Systematik verstehe.
Hallo! Ohne mir die Datei bereits angesehen zu haben (bin momentan mit Modem-Geschwindigkeit unterwegs ... :20: ): Du solltest erst nach den drei Kriterien sortieren und dann den Autofilter benutzen. Dies wird dazu führen, dass Dein Filtrat keine ausgeblendeten Zeilen enthält. (Statt Zeile 2, 15, 30, 68 hast Du dann einen Block: 115:118) Hier kannst Du dann die ersten x Zeilen ermitteln.
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
die Idee klingt nicht schlecht, aber sehe im Moment nicht so ganz, dass das funktionieren könnte.
Das Problem ist nämlich folgendes. Wenn in Spalte H Werte stehen, sollen die alle ab Zeile 2 gelistet werden. Dies funktioniert. Es Funktioniert auch, wenn ich dann die Spalte K sortiere nach Datum "Alter absteigend". In der Spalte K müssen zwingend Daten stehen. Nun kommen dann aber die beiden "Problemspalten". In Spalte L (Datumsangaben) können Werte stehen, müssen es aber nicht. Interessant für mich sind aber nur die Zeilen, in denen in Spalte L ein Wert steht und in Spalte M (Datumsangaben) nicht. Und hier scheitere ich dann bei dem Versuch.
Vielleicht sollte ich aber auch anders rangehen an das Problem und es nicht über eine "Ein-Knopf-drücken-Methode" versuchen zu lösen und mal die von meinem Vorgänger eingeführte Aktenverteilung grundsätzlich überdenken. Bisher ist das so geregelt, dass alle Akten in einem "Aktenpool" landen und wenn eine Akte bearbeitet wurde die nächste zugewiesen wird. Jetzt wäre ja mal die Gelegenheit, das umzustellen und die Akten direkt nach Anlage zuzuweisen... Klingt irgendwie schöner :19:
PS: Nicht wundern, da wo ich arbeite (Behörde) gibt es schon Programme zur Aktenverwaltung. Das Tool ist aber für Mitarbeiter vorgesehen, die Widersprüche bearbeiten und die sind im Programm nicht vorgesehen und sollen auch nicht mit berücksichtigt werden. Versteht kein Mensch, ist so und soll auch so bleiben
Hallo! Ich habe in der Zwischenzeit mal erarbeitet, wie man die sichtbaren Zeilen im Autofilter ermittelt. (Weil es mich auch interessiert und man auch nach Recherche nicht wirklich fündig wird) Bei mir ist die gefüllte Spalte die erste, also A. Folgender Code schreibt alle Zeilennummern des sichtbaren (gefilterten) Bereichs in ein Array, mit dem man natürlich weiterarbeiten kann. Willst Du die ersten 10 Datensätze manipulieren, dann betrifft dies arrTemp(1) bis arrTemp(10):
Code:
Sub test() Dim Zelle As Range, arrTemp(), tmpCounter As Long For Each Zelle In Intersect(Tabelle1.UsedRange.SpecialCells(xlCellTypeVisible), Tabelle1.Columns(1)) ReDim Preserve arrTemp(tmpCounter) arrTemp(tmpCounter) = Zelle.Row tmpCounter = tmpCounter + 1 Next MsgBox "Der Filter enthält " & UBound(arrTemp) & " von " & Tabelle1.UsedRange.Rows.Count - 1 & " Datensätzen!" MsgBox "erster Datensatz in Zeile: " & arrTemp(1) & vbLf & _ "letzer Datensatz in Zeile: " & arrTemp(UBound(arrTemp)) End Sub
Vielleicht kannst Du ja bereits damit etwas anfangen?
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:1 Nutzer sagt Danke an RPP63 für diesen Beitrag 28 • sandormiles
07.08.2015, 16:13 (Dieser Beitrag wurde zuletzt bearbeitet: 07.08.2015, 16:16 von sandormiles.)
Hallo Ralf, mit den "10 Datensätzen" und einem Button will ich so nicht weiterverfolgen. Dein Lösungsansatz hilft und ermöglich eine andere Option. Kannst du mir vielleicht zeigen, wie ich die Daten aus dem Array in eine Listbox bekomme? Mit
Code:
ListBox1.List = arrTemp()
zeigt mir die Listbox schon die Zeilennummern der sortierten und gefilterten Datensätze an, wobei auch die erste Zeile angezeigt wird. Hier stehen aber die Zeilenüberschriften. In der Listbox müssen dann aber nicht alle Spalten angezeigt werden. Eine Beispielspalte würde erstmal reichen, damit ich dann was zum probieren habe...