Supportnet / Forum / Tabellenkalkulation
Makro mit Autofilter
Frage
Hallo zusammen,
ich habe ein Problem mit einem Makro: Ich möchte in einem Excel-Worksheet die Spalte mit der Überschrift "fail. starts" so filtern, dass alle Zeilen die ein "x" haben angezeigt werden. Dieses Makro will ich dann über verschiedene Excel-Dateien laufen lassen. Das Problem ist, dass die "fail. starts" nicht immer in der gleichen Spalte zu finden sind. Einmal in Spalte AT, einmal in AU, einmal in AM usw. Ich habe folgendes Makro aufgenommen:
Sub RAM()
´
´ RAM Macro
´ Macro recorded 02.05.2005 by MeGr
´
´
Range("A9").Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Selection.AutoFilter
Selection.Find(What:="fail.", After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False).Activate
Selection.AutoFilter Field:=46, Criteria1:="x"
Range("A9").Select
Range(Selection, Selection.End(xlDown)).Select
Rows("9:147").Select
Selection.Copy
End Sub
Ich suche zwar nach der Zelle in der "fail. starts" steht und setze dort auch den Filter auf "x" (mit der Tastenkombination Alt+Pfeil nach unten). Aber das Makro merkt sich trotzdem fest das Feld 46, das ist AT9. Wenn ich nun das Makro über eine andere Datei laufen lasse, in der die "fail. starts" nicht in Spalte AT sind, funktioniert das Ganze leider nicht. Kann mir da jemand einen Tipp geben? (rel. Zellenbezug habe ich schon probiert, funktioniert leider auch nicht...). Danke!
Gruss,
Mel
Antwort 1 von coros
Hi Mel,
kopiere nachfolgendes Makro in ein StandardModul und weise es einer Befehlsschaltfläche zu.
Bei obigen Makro wird der Begriff "fail. Starts" in dem aktiven Blatt gesucht. Wenn der Begriff gefunden wurde, wird an der Stelle der Autofilter aktiviert.
Ich hoffe, das war so von Dir gemeint. Wenn nicht, bei Fragen oder Problemen mit dem Makro melde Dich.
Solltest Du nicht wissen, wie Du den Code in Deine Datei bekommst, dann schau mal auf meiner HP in der Rubrik Anleitungen und dort dann in der Anleitungsnummer 3 nach. Dort stelle ich dazu eine bebilderte Anleitung zur Verfügung, die Dir sicherlich helfen wird.
MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
kopiere nachfolgendes Makro in ein StandardModul und weise es einer Befehlsschaltfläche zu.
Sub Filtern()
Dim letzte_Zeile As Long, letzte_Spalte As Long, _
Spalte As Long, Zeile As Long
letzte_Zeile = Cells.SpecialCells(xlLastCell).Row
letzte_Spalte = Cells.SpecialCells(xlLastCell).Column
For Spalte = 1 To letzte_Spalte
For Zeile = 1 To letzte_Zeile
If Cells(Zeile, Spalte) = "fail. Starts" Then
Cells(Zeile, Spalte).AutoFilter Field:=2, Criteria1:="x"
End If
Next
Next
End Sub
Bei obigen Makro wird der Begriff "fail. Starts" in dem aktiven Blatt gesucht. Wenn der Begriff gefunden wurde, wird an der Stelle der Autofilter aktiviert.
Ich hoffe, das war so von Dir gemeint. Wenn nicht, bei Fragen oder Problemen mit dem Makro melde Dich.
Solltest Du nicht wissen, wie Du den Code in Deine Datei bekommst, dann schau mal auf meiner HP in der Rubrik Anleitungen und dort dann in der Anleitungsnummer 3 nach. Dort stelle ich dazu eine bebilderte Anleitung zur Verfügung, die Dir sicherlich helfen wird.
MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 2 von Melanie
Hi Coros,
danke für den Tipp. Werd´s mal versuchen und mich wieder melden...
Gruss,
Mel
danke für den Tipp. Werd´s mal versuchen und mich wieder melden...
Gruss,
Mel
Antwort 3 von Melanie
Hi Coros,
hier das Makro, mit dem es funktioniert:
Sub Filtern()
Dim letzte_Zeile As Long, letzte_Spalte As Long, Spalte As Long, Zeile As Long, letzte_Zeile_Markierung As Long, letzte_Spalte_Markierung As Long
letzte_Zeile = Cells.SpecialCells(xlCellTypeLastCell).Row
letzte_Spalte = Cells.SpecialCells(xlCellTypeLastCell).Column
For Zeile = 9 To letzte_Zeile
For Spalte = 1 To letzte_Spalte
If Left(Cells(Zeile, Spalte),5) = "Fail." Then
Range(Cells(Zeile, Spalte), Cells(letzte_Zeile, Spalte)).Select
Selection.AutoFilter field:=1, Criteria1:="x"
letzte_Zeile_Markierung = Cells.SpecialCells(xlCellTypeLastCell).Row
letzte_Spalte_Markierung = Cells.SpecialCells(xlCellTypeLastCell).Column
Range(Cells(Zeile, 1), Cells(letzte_Zeile_Markierung, letzte_Spalte_Markierung)).Select
Selection.Copy
Exit Sub
End If
Next
Next
End Sub
(Hatte Hilfe, alleine hätte ich das nie geschafft)
Vielen Dank für deine Hilfe.
Gruss,
Mel
hier das Makro, mit dem es funktioniert:
Sub Filtern()
Dim letzte_Zeile As Long, letzte_Spalte As Long, Spalte As Long, Zeile As Long, letzte_Zeile_Markierung As Long, letzte_Spalte_Markierung As Long
letzte_Zeile = Cells.SpecialCells(xlCellTypeLastCell).Row
letzte_Spalte = Cells.SpecialCells(xlCellTypeLastCell).Column
For Zeile = 9 To letzte_Zeile
For Spalte = 1 To letzte_Spalte
If Left(Cells(Zeile, Spalte),5) = "Fail." Then
Range(Cells(Zeile, Spalte), Cells(letzte_Zeile, Spalte)).Select
Selection.AutoFilter field:=1, Criteria1:="x"
letzte_Zeile_Markierung = Cells.SpecialCells(xlCellTypeLastCell).Row
letzte_Spalte_Markierung = Cells.SpecialCells(xlCellTypeLastCell).Column
Range(Cells(Zeile, 1), Cells(letzte_Zeile_Markierung, letzte_Spalte_Markierung)).Select
Selection.Copy
Exit Sub
End If
Next
Next
End Sub
(Hatte Hilfe, alleine hätte ich das nie geschafft)
Vielen Dank für deine Hilfe.
Gruss,
Mel

