Wie kann ich mit VBA in Excel über ein Dropdown-Menü Spalten ein- und ausblenden?
Hallo Community,
als Beispiel folgende Tabelle:
Wenn ich in A1 Januar auswähle, sollen die Spalten B bis E eingeblendet werden und die Spalten F bis I, J bis M, usw. ausgeblendet werden.
Wenn ich nun Februar auswähle, möchte ich, dass die Spalten F bis I eingeblendet werden und die Spalten B bis E, J bis M, usw. ausgeblendet werden.
Und immer so weiter.
Leider habe ich nicht ausreichende Kenntnisse in VBA und bitte deshalb euch um Hilfe. Könnte mir vielleicht jemand beim Programmieren weiterhelfen? :)
DANKE!
Liebe Grüße
3 Antworten
Dein Code hat bei mir funktioniert.
Hier mal etwas abgeändert, damit die weiteren Monate einfacher zu pflegen sind. oder wenn weitere Kunden dazukommen.
Sub EinAusblenden()
Dim myInput()
myInput = Array("Jan", "Feb", "Mär")
Dim myVisible()
myVisible = Array("D:E", "F:G", "H:I")
Dim myIndex
myIndex = WorksheetFunction.Match(Range("C3").Value, myInput, 0) 'Finde die Stelle des Monats
Dim myCols
myCols = WorksheetFunction.Index(myVisible, myIndex) 'Finde den sichtbaren Bereich mit dem Index
Columns("D:AA").EntireColumn.Hidden = True 'Alle AUSBLENDEN zum Start
Columns(myCols).EntireColumn.Hidden = False 'NUN genau die gewählte einblenden
End Sub
Noch ein Hinweis:
Wie du siehst gibt es jede Function die man als Formel in den Zellen kennt in VBA (als die englische Variante)
WorksheetFunction.Match (Hier crashed das Programm sollte nix gefunden werden)
mit
variable = Application.Match
hat man zunächst genau die gleich Funktion erhält aber in den Fehlerwert zurück mit dem man arbeiten kann. Programm stürzt nicht ab.
Leider habe ich scheinbar nicht ganz verstanden, wo ich "variable = Application.Match" im Code einsetzen soll.
Ich habe versucht, "myIndex = WorksheetFunction.Match" durch "variable = Application.Match" zu ersetzen. Und dann jedes "myIndex" durch "variable" ersetzt. War aber wohl nicht richtig. :/
Aber so sollte es schon reichen. Das Feld wird immer einen der 12 Werte enthalten und daher das Programm normalerweise nicht abstürzen. :) Danke!
Die bisherigen Antworten sind ja schon ganz gut. Wenn du noch willst, dass du das Makro nicht immer selbst aufrufen musst, kannst du es in die Prozedur "Workbook_Change" reinschreiben, damit bei jeder Änderung geprüft wird, ob du einen anderen Monat ausgewählt hast und dementsprechend die Spalten ein- und ausgeblendet werden.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim MonatNr As Integer
If Target.Address = "$A$1" Then ' Prüfen, ob der Monat verändert wurde
Range("B:AW").EntireColumn.Hidden = True ' Alle Spalten ausblenden
MonatNr = Month("01." & Target & ".1900") ' Die Nummer des Monats berechnen
Range(Cells(1, 4 * (MonatNr - 1) + 2), Cells(1, 4 * (MonatNr) + 1)).EntireColumn.Hidden = False ' Die Spalten, die den Monat enthalten, wieder einblenden
End If
End Sub
Es gibt den "Makro Rekorder", der alles aufzeichnet was du tust.
Im Anschluss kannst du den Code anschauen und auf deine Bedürfnisse anpassen.
In deinem Fall kommt noch ein wenig Mathematik dazu um die Spalten zum EINBLENDEN zu ermitteln.
Ich habe nun einen ersten Versuch gestartet. Leider funktioniert es nicht. Was mache ich falsch? (In C3 ist das Dropdown-Menü mit den Monat Januar bis Dezember)
Sub EinAusblenden()
If Range("C3").Value = "Februar" Then
Columns("D:E").EntireColumn.Hidden = True
Columns("F:G").EntireColumn.Hidden = False
Columns("H:I").EntireColumn.Hidden = True
Columns("J:K").EntireColumn.Hidden = True
Columns("L:M").EntireColumn.Hidden = True
Columns("N:O").EntireColumn.Hidden = True
Columns("P:Q").EntireColumn.Hidden = True
Columns("R:S").EntireColumn.Hidden = True
Columns("T:U").EntireColumn.Hidden = True
Columns("V:W").EntireColumn.Hidden = True
Columns("X:Y").EntireColumn.Hidden = True
Columns("Z:AA").EntireColumn.Hidden = True
End If
End Sub
Mega gut! Dank dir habe ich in wenigen Stunden eine Menge dazu gelernt. Vielen vielen Dank!