Frage von lupus01, 62

Gibt es im Excel die Möglichkeit einer Abfrage, welche Spalten eingeblendet werden sollen?

Expertenantwort
von Suboptimierer, Community-Experte für Excel, 47

Das Programm kann nicht wissen, welche Spalten eingeblendet werden sollen. Es kann nicht Gedanken lesen ;)

Du kannst aber wie folgt abfragen, ob eine Spalte eingeblendet ist.

=ZELLE("Breite";A1)

Programmgesteuert umsetzen kannst du die Sichtbarkeit mittels VBA:

Sub SpalteSwitchen()
  Range("A1").EntireColumn.Hidden = Not Range("A1").EntireColumn.Hidden
End Sub
Kommentar von lupus01 ,

Meine Gedanken teile ich dem Programm gerne mit.

Gibt es ein Makro, um ein Feld zu kreieren, das beim draufklicken die Spalten anzeigt und ich auswählen kann, welche eingeblendet werden sollen? So ne Art Datenbankabfrage....

Kommentar von Suboptimierer ,

Wenn es um Zeilen ginge, hättest du es einfacher. Das entspräche einer gängigen Datenbankabfrage, die dargestellten Tupel zu steuern. Hierfür bietet Excel den Autofilter.

Du kannst auch mit Pivottabellen mal experimentieren.

Das obige Makro könntest du über ein Klick auf einen Button starten, welchen du im Sheet erzeugst. 
Entwickliertools → Einfügen → Formularsteuerelemente → Schaltfläche

Im Makro kannst du den Inhalt einzelner Zellen abfragen. Wenn du zum Beispiel Spalte A ausblenden willst, wenn in Zelle C1 WAHR steht, dann lautet der Befehl

Range("A1").EntireColumn.Hidden = Range("C1").Value

Noch komfortabler wäre ein Formular, welches aber mit größerem Aufwand verbunden wäre.

Kommentar von lupus01 ,

Danke, ja mit Zellen wäre das weniger das Problem.

An Pivottabellen bin ich grad dran und versuche mich durchzuprobieren, da muss ich ehrlich sagen, hab ich noch nichts damit gemacht. Und die Lösung hab ich auch noch nicht gefunden.

Danke für deine Hilfe bisher!

Antwort
von iMPerFekTioN, 44

Per Makro über VBA ist dsa möglich =) Mit Formeln etc geht das leider nicht ;)

Expertenantwort
von Ninombre, Community-Experte für Excel, 34

Wie schon in der anderen Antwort genannt mit VBA / Makro ohne weiteres. Wie würdest Du Dir die Abfrage denn vorstellen? Soll der Anwender was eingeben oder sind die Spalten irgendwie markiert, die eingeblendet werden sollen?

Kommentar von lupus01 ,

Optimalerweise hab ich ein Feld und beim Anklicken kommt die Auswahl der Spalten. zB die Überschriften untereinander. Vor den Überschriften kann ich ein Häkchen setzen, dann wird die Spalte eingeblendet, ohne Häkchen bleibt es ausgeblendet.

Das wäre wie gesagt, das Optimum :)

Kommentar von Iamiam ,

mach anstatt des Häkchens eine 1 rein und verwende dann das Makro von Subopt, eingebettet in eine For Each-Schleife und als Bereichsangabe die Zahl der Zellen, für die Du die Definition brauchst!

Und noch einen extra Knopf für AlleWiedereinblenden bzw AlleWiederausblenden, je nach gewünschter Ausgangslage!

Vllt machts ja jemand noch vor heut nacht, ansonsten setz ich mich dann mal dran!

Kommentar von Iamiam ,

ist mir heute zu spät geworden, erst mal nur eine Skizze: Neue Spalte A einfügen. Formel in A1:

=WENN(ZELLE("Breite";INDIREKT(ADRESSE(ZEILE($A$1);ZEILE())))=0;"Spalte "&ZEICHEN(ZEILE()+64);"-")

runterziehen. Zeigt an, welche Spalte ausgeblendet ist.

in Spalte B die gespiegelten Spaltenüberschriften, B1:

=INDIREKT(ADRESSE(1;ZEILE()))

runterziehen

Und dann ein Ereignismakro Worksheet_SelectionChange, das die Spalte beim Anklicken einblendet, sowie einen Rückstellknopf, der alle (als Spaltenbereich definierten) Spalten ausser A:B ausblendet. (morgen dann).

sollte einfach gehen, mal sehen.

Kommentar von Iamiam ,

Hatte etwas mit der Syntax zu kämpfen, aber jetzt ok:


Optimalerweise hab ich ein Feld und beim Anklicken kommt die Auswahl der Spalten. zB die Überschriften untereinander.

drücke Strg+F11: der VBA-Editor öffnet sich. Menü Ansicht: Projekt-Explorer. Nun Doppelklick auf Dein Wunschblatt und im sich öffnenden zugehörigen BlattModul folgenden Code einfügen:

'blendet Spalten nach Wahl aus/ein:

Sub worksheet_selectionchange(ByVal Target As Range)

If Not Intersect(Range("A17:A25"), Target) Is Nothing Then

If Len(Target) > 7 Then

Columns(Target.Row).Hidden = False

Else

Columns(Target.Row).Hidden = True

End If

Target.Calculate

End If

End Sub

(hab die Bereiche jetzt nur für die Spalten Q:Y <=> Zeilen 17:25 gemacht, kannst aber die Bereiche entsprechend erweitern. Wenn Du nicht zurechtkommst, nenne mir Deinen Wunschbereich, ich schreibs dann um, vorläufig zeigt sie nur für einstellige Spaltennamen richtig an, funktioniert prinzipiell aber auch bei zweistelligen)

zurück ins Blatt: Klickst Du nun im Blatt Spalte A neben die Überschrift, wird diese Spalte ausgeblendet -sichtbar durch den Eintrag SpalteX. Da es sich um ein SelectionCHANGE-µ handelt, musst Du bei versehentlichem Ausblenden erst mal irgendwo anders klicken und dann nochmals auf dieselbe Zelle: sie wird wieder eingeblendet.

Mach dann noch ein zB Textfeld als Schaltelement mit der Aufschrift:

ALLE Ein-/ausblenden (alle bezieht sich auf den programmierten Bereich)

Das zugehörige Makro sollte nicht im Blattmodul stehen, sondern in einem "normalen": Menü Einfügen-Modul, da hinein dann:

Sub Alle_Ein_Ausblend() 'gehört zu MBlatt bzw µ Worksheet_selectionchange

ActiveSheet.Range("Q1:Y1").EntireColumn.Select

If Application.CountA(ActiveSheet.Range("A17:A25")) <> Application.CountIf(ActiveSheet.Range("A17:A25"), "-") Then

Selection.EntireColumn.Hidden = False 'wenn welche nicht sichtbar sind, sollten alle im Bereich eingeblendet werden 17=Q, 25=Y

Else

Selection.EntireColumn.Hidden = True 'sollte alle ausblenden

End If

ActiveSheet.Range("A17:A25").Calculate

End Sub

und das Textfeld nach wunschgemäßem Formatieren diesem Makro zuweisen.

Ggf mit genauen Angaben zurückfragen!

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten