Funktion für Button 1 soll sein:
Blende alle Zeilen EIN wo in Spalte B ein „B“ steht.
Blende alle Zeilen AUS wo in Spalte B ein „F“ steht
Blende alle Zeilen AUS wo in Spalte B ein „S“ steht
Funktion für Button 2 soll sein:
Blende alle Zeilen EIN wo in Spalte B ein „F“ steht.
Blende alle Zeilen AUS wo in Spalte B ein „B“ steht
Blende alle Zeilen AUS wo in Spalte B ein „S“ steht
Funktion für Button 3 soll sein:
Blende alle Zeilen EIN wo in Spalte B ein „S“ steht.
Blende alle Zeilen AUS wo in Spalte B ein „B“ steht
Blende alle Zeilen AUS wo in Spalte B ein „F“ steht
Funktion für Button 4 soll sein:
Blende alle Zeilen EIN wo in Spalte B ein „F“ steht.
Blende alle Zeilen EIN wo in Spalte B ein „B“ steht
Blende alle Zeilen EIN wo in Spalte B ein „S“ steht
Ich muss gestehen, dass ich absoluter VBA-Anfänger bin.
Kann mir hier jemand helfen?
Wie müsste der Code hierfür aussehen? Und wo muss ich diesen einfügen?
hast Du denn schon einen Autofilter in der Tabelle drin? Falls Ja, ginge das auch mit diesem ohne VBA, indem Du die Zeilen in Spalte B filterst. Falls kein Filter vorhanden ist, kannst Du einen solchen über die Auswahl eines Bereichs in Spalte B inklusive der Spaltenüberschrift und Aufruf von Start/Sortieren & Filtern/Filtern anlegen.
Sub Knopf1()
Columns("B:B").Select
For Each zelle In Selection
zv = zelle.Value
If zv = "B" Then zelle.EntireRow.Hidden = False
If zv = "F" Then zelle.EntireRow.Hidden = True
If zv = "S" Then zelle.EntireRow.Hidden = True
Next zelle
Range("A1").Select
End Sub
Analog dazu werden die andern Knöpfe eingerichtet.
Wie Du ihn einfügen musst - dafür findest Du im Netz ganz bestimmt unzählige Anleitungen. Suche z. B. mal unter „Excel VBA Grundkenntnisse“. Wenn’s nicht klappt, dann melde Dich noch einmal.
Niclaus, nach deiner Anleitung funktioniert es genau so wie ich es haben wollte. Also, das Ergebnis ist das richtige.
Allerding dauert es nach Klick auf einen Button immens lange bis fertigberechnet wurde.
Ist das normal, bzw. woran liegt das?
Sollte/kann ich den Zeilenbereich beschränken?
Also, statt komplette Spalte B prüfen, nur B1:B100.?
Sub Knopf1()
Dim Zelle As Range
Application.Cursor = xlWait
Application.ScreenUpdating = False
For Each Zelle In ActiveSheet.Range("B1:B100")
Zelle.EntireRow.Hidden = _
Zelle.Value = "F" Or _
Zelle.Value = "S"
Next
Application.ScreenUpdating = True
Application.Cursor = xlDefault
End Sub
Die Anzeige des Ein- und Ausblendens am Bildschirm wird durch ScreenUpdating = False unterdrückt und dadurch der Code etwas schneller. Select-Anweisungen sind meist überflüssig. Den Bereich kannst Du im Code vorgeben.
seit (ich meine) Excel 2007 ist das Ein- und Ausblenden von Zeilen per VBA deutlich langsamer als in früheren Versionen; insbesondere bei vielen Zeilen. Deshalb hatte ich Dir im ersten Beitrag von mir vorgeschlagen den AutoFilter zu verwenden. Dieser ist meist schon schneller. Einen solchen könnte man auch ggf. per Code ansprechen. Hier mal ein Beispiel:
Public Sub FilterMitVBA_B()
If ActiveSheet.AutoFilterMode Then
Application.Cursor = xlWait
Application.ScreenUpdating = False
ActiveSheet.AutoFilter.ShowAllData
ActiveSheet.Range(ActiveSheet.AutoFilter.Range.Address) _
.AutoFilter Field:=1, Criteria1:="B", Operator:=xlFilterValues
Application.ScreenUpdating = True
Application.Cursor = xlDefault
End If
End Sub
Der Code setzt voraus, dass ein Autofilter gesetzt ist und dieser in Spalte B beginnt (Field:=1) sowie eine Überschrift vorhanden ist, wo die Filterpfeile zu sehen sind. Als Kriterium wird dann „B“ verwendet.