Spalten via VBA ein und Ausblenden lassen, Wenn "Name" im Dropdown Menü?

3 Antworten

Zusatzinformation: Ich bin ein kompletter Laie in VBA und habe davor damit noch nie gearbeitet, 

Willst Du üben - dann übe. 😉

Ansonsten würde ich zu Deinem Tabellenblatt ein "Deckblatt" kreieren und darin die gesuchten Informationen per SVerweis bzw. per XVerweis abholen und anzeigen lassen.

Je nach ausgewähltem Wert sollen sich Spalten Ein- und Ausblenden. Wenn kein Wert drinnen steht,

Sollten sich dabei "Null-Werte" ergeben würde ich diese Zeilen per Autofilter aus/einblenden. Dazu wäre je ein einfaches Makro für Ein- und Ausblenden möglich, welches per Symbol durch Mausklick bedient werden könnte.

Zunächst einmal wäre für mich wichtig zu wissen, was hast du im Anschluss mit den Werten vor?

Ansehen auswerten, Kunden anrufen, drucken oder was auch immer?

Oder soll mit denen noch was geschehen?

Ich bin generell kein Freund von VBA in Excel, ich hätte daher 2 alternative Ideen.

Ich kenne deine Datenbasis nicht von welchem Umfang wir hier reden, aber ich würde hier tatsächlich eher an Access verweisen, dies scheint mir vom ersten Eindruck die bessere Software dafür zu sein.

Falls es unbedingt Excel sein muss, würde ich eher die dynamischen Arrayfunktionen Verwenden prädestiniert wäre hier der Filter in Kombination mit Spaltenwahl, anstelle also auszublenden zeigst du einfach nur die Relevante Daten an:

Hier ein Beispiel:

Bild zum Beitrag

hier kommen 2 sehr ähnliche Varianten zum Einsatz, tun aber beide Grundsätzlich das gleiche, nämlich das Ausblenden was du in C2 oder C3 ausgewählt hast.

Zur Erklärung:

VSTAPELN(A6:I6;FILTER(A7:I18;F7:F18=C4))

Dies Stapelt die Überschriften und den Wertebereich übereinander, der Wertebereich wird außerdem nach dem in C4 ausgewählten Wert gefiltert.

SEQZENZ(;SPALTEN(A6:I6))

baut eine Datenreihe in Spaltenrichtung auf mit den Werten 1 bis 9 (sollte deine Tabelle nicht in Spalte A beginnen, muss hier ein Offset her, der dafür sorgt das der niedrigste Werte immer 1 ist.

Nun wird dieser Wert verglichen mit dem Spaltenindex den der Vergleich hervorbringt (Achtung VERGLEICH gibt einen relativen Spaltenindex zurück, daher ist auch der OFFSET nötig, falls die Tabelle nicht in Spalte A beginnt, außerdem prüft WENN ob in C3 optional drin steht, ist dies der Fall wird nur der Wert in C2 zu rate gezogen ist dies nicht der Fall wird der Wert in C3 genommen.

Spaltenwahl nimmt nun jene Werte blendet all jene Spalten ein.

Das war die gesamte Magie.

Die andere Variante unterscheidet sich nur sehr marginal, anstelle eines 2. Filters kommt hier ZUZEILE+WENNS zum Einsatz, WENNS hat im Gegensatz zu WENN die Besonderheit einen Standard Rückgabewert definieren zu können, gibt man diesen aber nicht an und die zuvor verwendeten Bedingungen greifen den Fall nicht ab, dann wird #NV ausgegeben; dies mache ich mir hier zu nutze, Spalten die Ungleich der definierten Spalte sind erhalte ich den Spaltenindex, für diese eine aber #NV.

hier als Bild

Bild zum Beitrag

Im Anschluss löscht ZUZEILE durch den Parameter ;2 alle Fehler raus, es bleiben also nur noch alle Zahlen übrig.

Wie auch oben verrichtet nun Spaltenwahl noch sein Werk und das war es dann auch schon.

Ich persönlich finde die ZUZEILE Variante besser, da ich sie für Erweiterungen besser geeignet halte.

Ist aber Ende wie immer Geschmackssache.

Woher ich das weiß:Berufserfahrung – sowohl Beruf als auch Hobby
 - (Formel, Microsoft Excel, VBA)  - (Formel, Microsoft Excel, VBA)

Mir sagt der Screenshot nicht so viel. Hier wären zwei inaktiv und aktiv eventuell klarer.

Wenn du jedenfalls einen VBA Code brauchst, um etwas in Abhängigkeit ein/auszublenden, versuch folgendes:

Als Makro:

Sub SpalteEinAusblenden()
Dim ws As Worksheet
Dim zielZelle As Range
Dim targetColumn As Long

' Arbeitsblatt definieren
Set ws = ThisWorkbook.Sheets("DeinBlattName") 

' Zelle definieren, die den Wert enthält
Set zielZelle = ws.Range("A1")

' Spaltennummer definieren, die ein- oder ausgeblendet werden soll
targetColumn = 3 ' Für Spalte "C"

' Bedingung überprüfen und Spalte ein- oder ausblenden
If zielZelle.Value = "Einblenden" Then
ws.Columns(targetColumn).Hidden = False
ElseIf zielZelle.Value = "Ausblenden" Then
ws.Columns(targetColumn).Hidden = True
End If
End Sub

und als im Hintergrund laufende Routine, die als Ereignis auf "change" reagiert:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim zielZelle As Range
Dim targetColumn As Long

' Zelle definieren, die überwacht wird
Set zielZelle = Me.Range("A1")
targetColumn = 3 ' Für Spalte "C"

' Überprüfen, ob die Änderung in der Zelle "A1" war
If Not Intersect(Target, zielZelle) Is Nothing Then
' Bedingung überprüfen und Spalte ein- oder ausblenden
If zielZelle.Value = "Einblenden" Then
Me.Columns(targetColumn).Hidden = False
ElseIf zielZelle.Value = "Ausblenden" Then
Me.Columns(targetColumn).Hidden = True
End If
End If
End Sub