Wie kann ich mit VBA in Excel über ein Dropdown-Menü Spalten ein- und ausblenden?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

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

 

Deckenlaeufer 
Fragesteller
 21.02.2021, 08:51

Mega gut! Dank dir habe ich in wenigen Stunden eine Menge dazu gelernt. Vielen vielen Dank!

1
IchMalWiederXY  21.02.2021, 11:23
@Deckenlaeufer

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.

1
Deckenlaeufer 
Fragesteller
 21.02.2021, 18:15
@IchMalWiederXY

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!

0

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.


Deckenlaeufer 
Fragesteller
 20.02.2021, 18:53

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

0