Anzeigen wenn Haken gesetzt
#1
Brick 
Hallo zusammen,

ich benötige hier kurz eure Hilfe!

Ich bin grade dabei eine Auswertung zu bauen und möchte etwas an der Benutzerfreundlichkeit anpassen.

Es geht um folgendes:
In der Liste sind sehr viele Spalten enthalten die erst im laufe des Jahres befüllt werden können (nach Monaten).

In vielen Überschriften der Tabellenspalten sind die Monate als Text enthalten.
Ich habe bereits eine kleine Legende erstellt in der die Monate aufgeführt sind und daneben gibt es die Möglichkeit mit einem Doppelklick ein Haken zu setzten (hat den Wert 1).

Jetzt benötige ich ein Marko, welches 2 Dinge macht.
1. Es dürfen nur Spalten ein oder ausgeblendet werden in denen überhaupt ein Monat aufgeführt ist (in der Testdatei ist die erste Spalte "Nr", diese soll gar nicht von dem Makro erfasst werden und immer stehen gelassen werden, da kein Monat enthalten ist)
2. Es sollen nur die Spalten angezeigt werden die in der Legende mit einem Haken versehen wurden.

Ich hoffe es findet sich jemand der mir hier helfen kann.

Vielen Dank im Voraus an alle die sich dem annehmen möchten!

:15:


Angehängte Dateien
.xlsm   Test-AnzeigenWenn.xlsm (Größe: 21,58 KB / Downloads: 13)
Top
#2
Hi Semmy

probier mal

Code:
Sub Spaltenkontrolle()
   Dim Zelle As Range, Monate, i As Long
   Application.ScreenUpdating = False
   Monate = Range("C2:D13")
   For Each Zelle In Range("i16:AR16")
      For i = 1 To UBound(Monate, 1)
         If InStr(Zelle, Monate(i, 1)) Then
            Zelle.EntireColumn.Hidden = IIf(Monate(i, 2) = 1, False, True)
            Exit For
         End If
      Next i
      Zelle.Select
   Next Zelle
   Application.ScreenUpdating = True
End Sub
Weise dem blauen Button das Makro zu und starte dann.

Probier es mal aus.

Gruss Raoul
[-] Folgende(r) 1 Nutzer sagt Danke an Raoul21 für diesen Beitrag:
  • SemmyW
Top
#3
Hallo Semmy,

schau mal, ob anliegender Code in Deinem Sinne funktioniert.

Es sind ja nur wenige Spalten, so dass aller in einer Schleife ein/ausgeblendet werden kann. Bei sehr vielen Spalten könnte man die einzublendenden Spalte auch sammeln und in einem Rutsch einblenden.
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

  If Not Intersect(Target, Range("D2:D13")) Is Nothing Then
    With Application
        .Cursor = xlNorthwestArrow
        If Target = 1 Then Target = vbNullString Else Target = 1
        .Cursor = xlDefault
        Cancel = True
    End With
  End If

End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
 Dim iZeile As Long, rZelle As Range
 
 If Not Intersect(Target, Range("D2:D13")) Is Nothing Then
  
  With Application
    .ScreenUpdating = False
    .EnableEvents = False
  End With
 
  Range("I16:AR16").EntireColumn.Hidden = True 'Alles ausblenden
  For Each rZelle In Range("I16:AR16")         'Kopfbereich festlegen
    For iZeile = 2 To 13                       'Alle Monate durchgehen
      With Cells(iZeile, "C")
        If .Value Like Right$(rZelle.Value, Len(.Value)) Then
          If .Offset(0, 1).Value = 1 Then
             rZelle.EntireColumn.Hidden = False 'Einblenden
          End If
        End If
      End With
  
    Next iZeile
  Next rZelle
 
  With Application
    .ScreenUpdating = True
    .EnableEvents = True
  End With

 End If

End Sub

viele Grüße aus Freigericht
Karl-Heinz
[-] Folgende(r) 1 Nutzer sagt Danke an volti für diesen Beitrag:
  • SemmyW
Top
#4
Vielen Dank euch beiden!


Die richtige Datei hat später ca 800 Spalten und es werden nicht alle Spalten mit einem Monatsnamen nebeneinander aufgeführt.



Ich habe jetzt beides testen können und der Code von Raoul hat in meinen kleinen Tests besser funktioniert, da er wirklich die Spalten in "ruhe" lässt die keinen der Monatsnamen im Titel enthalten.

Die Option von volti, dass die Liste sofort aktualisiert wird finde ich auch nicht schlecht.

Vielen Dank euch beiden! 

Ihr habt mir sehr geholfen.

Beste Grüße und einen schönen Tag noch!

:15:
Top
#5
Hallo Semmy,

danke für die Rückmeldung.

Ich hatte es auch erst so wie Raoul, also dass jede Spalte einzeln ein/ausgeblendet wird und damit wären auch Spalten ohne Monatsname "in Ruhe" gelassen worden. Das habe ich später geändert.

Mir war angesichts der Musterdatei nicht bewusst, dass es auch noch andere Spalten gibt... Smile

viele Grüße
Karl-Heinz
[-] Folgende(r) 1 Nutzer sagt Danke an volti für diesen Beitrag:
  • SemmyW
Top
#6
(27.08.2020, 10:41)Raoul21 schrieb: Hi Semmy

probier mal

Code:
Sub Spaltenkontrolle()
   Dim Zelle As Range, Monate, i As Long
   Application.ScreenUpdating = False
   Monate = Range("C2:D13")
   For Each Zelle In Range("i16:AR16")
      For i = 1 To UBound(Monate, 1)
         If InStr(Zelle, Monate(i, 1)) Then
            Zelle.EntireColumn.Hidden = IIf(Monate(i, 2) = 1, False, True)
            Exit For
         End If
      Next i
      Zelle.Select
   Next Zelle
   Application.ScreenUpdating = True
End Sub
Weise dem blauen Button das Makro zu und starte dann.

Probier es mal aus.

Gruss Raoul

Ich brauche doch nochmal Hilfe.
in meiner Tabelle sind Legende und die Tabelle mit den Daten nicht auf dem selben Blatt.
Du hast hier ja einfach nur die Zellen ausgewählt in dem Blatt, welches ich grade betrachte.

für die legende habe ich es geschafft die Daten dem Datenblatt zuzuweisen: Monate = Sheets("tabelle1").Range("C2:D13")

aber wenn ich dies für die Tabelle mit den Monatsdaten anpasse kommt ein Fehler.

Vielen Dank schon mal!

Also um das nochmal klar zustellen,

es kommt dann ein Fehler bei 

Zelle.Select

keine Ahnung was ich da machen muss  Confused
Top
#7
Hallo,

lösche die Zeile, die brauchst Du nicht.
Gruß Stefan
Win 10 / Office 2016
Top
#8
Danke dir.

war ja doch ganz einfach.

Ich versuch es dann mal in meine Hauptliste einzubauen.

mal sehen ob es dann so klappt wie ich es mir vorgestellt habe.

Danke euch!
Top
#9
Ich brauche doch noch mal Hilfe.

Es wurde jetzt noch eine stufe komplizierter. Dachte ich könnte es selber erweitern, aber da sitze ich schon zu lange dran ...

Ich hatte Ursprünglich geplant einfach nur die Monate ein oder ausblenden zu lassen, also 1 Kriterium. 

Jetzt bräuchte ich dies für 4 Kriterien die sich gegenseitig nicht ausschließen sollen.
Ich meine damit, dass wenn es eine Zelle gibt die "HerstellerAAA Dezember" heißt und eine Zelle mit "HerstellerBBB Dezember", dass ich jetzt ein Haken bei Hersteller AAA setzte und einen Haken bei Dezember und ich somit nur noch die Zelle "HerstellerAAA Dezember" angezeigt bekommen.

ich habe meine Testliste jetzt entsprechend erweitert.

Vielen Dank!


Angehängte Dateien
.xlsm   Test-AnzeigenWenn.xlsm (Größe: 27,12 KB / Downloads: 8)
Top
#10
Hallöchen,

in einem Code weiter oben prüfst Du den Monat:

If InStr(Zelle, Monate(i, 1)) Then

Bei zwei Bedingungen prüfst Du beide, im Prinzip:

If InStr(Zelle, Monate(i, 1)) And InStr(Zelle, "AAA") Then
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste