Clever-Excel-Forum

Normale Version: Anzeigen wenn Haken gesetzt
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
(28.08.2020, 07:16)schauan schrieb: [ -> ]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

Danke dir.

ich weiß leider nicht wie ich die anderen Bedingungen definiere. 

Ich habe das mal wie folgt versucht:
Code:
Sub SpaltenkontrolleMonate()
   Dim Zelle As Range, Monate, Haendler, Hersteller, KW, i As Long
   Application.ScreenUpdating = False
   Monate = Sheets("Tabelle1").Range("C2:D4")
   Haendler = Sheets("Tabelle1").Range("F2:G4")
   Hersteller = Sheets("Tabelle1").Range("I2:J4")
   KW = Sheets("Tabelle1").Range("L2:M5")
   For Each Zelle In Sheets("Tabelle2").Range("H16:AU16")
      For i = 1 To UBound(Monate, 1) And UBound(Haendler, 1) And UBound(Hersteller, 1) And UBound(KW, 1)
         If InStr(Zelle, Monate(i, 1)) And InStr(Zelle, Haendler(i, 1)) And InStr(Zelle, Hersteller(i, 1)) And InStr(Zelle, KW(i, 1)) Then
            Zelle.EntireColumn.Hidden = IIf(Monate Or Haendler Or Hersteller Or KW(i, 2) = 1, False, True)
            Exit For
         End If
      Next i
   Next Zelle
   Application.ScreenUpdating = True
End Sub

Funktionieren tut es jedenfalls nicht (wundert auch keinen)
Hallöchen,

gleich mal was ins Auge sticht - da hast Du bei der Schleife etwas zu viel aufgetragen Smile So geht es nicht:

For i = 1 To UBound(Monate, 1) And UBound(Haendler, 1) And UBound(Hersteller, 1) And UBound(KW, 1)


Da alle 3 Arrays die gleiche größe haben nimm irgendeins davon, z.B.

For i = 1 To UBound(Monate, 1)
(28.08.2020, 08:29)schauan schrieb: [ -> ]Hallöchen,

gleich mal was ins Auge sticht - da hast Du bei der Schleife etwas zu viel aufgetragen Smile So geht es nicht:

For i = 1 To UBound(Monate, 1) And UBound(Haendler, 1) And UBound(Hersteller, 1) And UBound(KW, 1)


Da alle 3 Arrays die gleiche größe haben nimm irgendeins davon, z.B.

For i = 1 To UBound(Monate, 1)


Ich kenne die meisten Worte die du sprichst, aber leider bin ich noch so ein Laie, dass ich es nicht verstehe. 

Prinzipiell ist dies auch nur die Testdatei, in der echten Datei sind alle 12 Monate im ersten Auswahlfeld enthalten, Händler gibt es 15, Hersteller gibt es 5 und KWs sind mit 53 Zeilen dabei.
Weiß nicht ob du das mit den "gleichen Größen" meinst.

Danke!
Folgendes Makro zeigt alle Spalten mit Haken in Tabelle1.



Code:
Sub SpaltenkontrolleMehrfach()

   Dim Auswahl As New Collection
   Dim Zelle As Range
   Dim Bereich, i As Long
   Dim Sichtbar As Boolean
   Application.ScreenUpdating = False
   With Worksheets("Tabelle1")
      Auswahl.Add .Range("C2").CurrentRegion.Value
      Auswahl.Add .Range("F2").CurrentRegion.Value
      Auswahl.Add .Range("I2").CurrentRegion.Value
      Auswahl.Add .Range("L2").CurrentRegion.Value
   End With
   For Each Zelle In Worksheets("Tabelle2").Range("i16:AU16")
      Sichtbar = False
      For Each Bereich In Auswahl
         For i = 2 To UBound(Bereich, 1)
            If InStr(Zelle, Bereich(i, 1)) Then
               If Bereich(i, 2) = 1 Then Sichtbar = True
               If Sichtbar Then Exit For
            End If
         Next i
         If Sichtbar Then Exit For
      Next Bereich
      Zelle.EntireColumn.Hidden = Not Sichtbar
   Next Zelle
   Application.ScreenUpdating = True
End Sub


Beachte:
Das muss vllt im Anwendungsfall angepasst werden:
Es werden Spalten I bis AU in Tabelle2 behandelt.
In Tabelle1 werden vier Bereiche für Haken berücksichtigt. Diese müssen stets von Leerzellen umschlossen sein (wegen "CurrentRegion" im Code), was hier ja auch der Fall ist.



Gruss, Raoul
(28.08.2020, 10:35)Raoul21 schrieb: [ -> ]Folgendes Makro zeigt alle Spalten mit Haken in Tabelle1.



Code:
Sub SpaltenkontrolleMehrfach()

   Dim Auswahl As New Collection
   Dim Zelle As Range
   Dim Bereich, i As Long
   Dim Sichtbar As Boolean
   Application.ScreenUpdating = False
   With Worksheets("Tabelle1")
      Auswahl.Add .Range("C2").CurrentRegion.Value
      Auswahl.Add .Range("F2").CurrentRegion.Value
      Auswahl.Add .Range("I2").CurrentRegion.Value
      Auswahl.Add .Range("L2").CurrentRegion.Value
   End With
   For Each Zelle In Worksheets("Tabelle2").Range("i16:AU16")
      Sichtbar = False
      For Each Bereich In Auswahl
         For i = 2 To UBound(Bereich, 1)
            If InStr(Zelle, Bereich(i, 1)) Then
               If Bereich(i, 2) = 1 Then Sichtbar = True
               If Sichtbar Then Exit For
            End If
         Next i
         If Sichtbar Then Exit For
      Next Bereich
      Zelle.EntireColumn.Hidden = Not Sichtbar
   Next Zelle
   Application.ScreenUpdating = True
End Sub


Beachte:
Das muss vllt im Anwendungsfall angepasst werden:
Es werden Spalten I bis AU in Tabelle2 behandelt.
In Tabelle1 werden vier Bereiche für Haken berücksichtigt. Diese müssen stets von Leerzellen umschlossen sein (wegen "CurrentRegion" im Code), was hier ja auch der Fall ist.



Gruss, Raoul

Danke dir!

Leider hat es nicht ganz funktioniert mit der Formel.

Wenn ich jetzt den Dezember abwähle, wird dennoch der Dezember bei Händler AAA angezeigt, weil dieser noch ausgewählt ist.
Hi

wenn Du antwortest, bitte zitiere nicht die Frage. Dass Du Dich auf das eben Geschriebene beziehst, ist ja naheliegend.

Händler AAA wird angezeigt, wei er angehakt ist. Alles was Haken hat, wird angezeigt.

Willst Du es anders? OK. Wie in diesem Fall?
Sorry wenn ich mich zu umständlich ausgedrückt habe. Will hier niemandem unnötige Mehrarbeit machen.

Ich versuche es mal umgekehrt zu umschreiben.

Wenn ein Haken nicht gesetzt ist, soll jede Zeile in der die jeweiligen Information enthalten ist, ausgeblendet werden.

in meinem Beispiel:

Dez
Nov   X
Okt   X

AAA   X
BBB   X
CCC   X

Dann sollte die Spalte mit Namen "AAA-Dezember" nicht angezeigt werden, da keine Dezember angaben angezeigt werden sollen, auch wenn der Haken bei AAA gesetzt ist. 

Vielen Dank für deine Hilfe!
Ein neuer Versuch: 
Im Makro wird bei jeder Spalte mit jedem Haken überprüft, ob ein Ausblendegrund vorliegt.
(Im alten Makro wurde auf Einblendung geprüft.)

Code:
Sub SpaltenkontrolleMehrfachAlternative()

   Dim Auswahl As New Collection
   Dim Zelle As Range
   Dim Bereich, i As Long
   Dim Ausgeblendet As Boolean
   Application.ScreenUpdating = False
   With Worksheets("Tabelle1")
      Auswahl.Add .Range("C2").CurrentRegion.Value
      Auswahl.Add .Range("F2").CurrentRegion.Value
      Auswahl.Add .Range("I2").CurrentRegion.Value
      Auswahl.Add .Range("L2").CurrentRegion.Value
   End With
   For Each Zelle In Worksheets("Tabelle2").Range("i16:AU16")
      Ausgeblendet = False
      For Each Bereich In Auswahl
         For i = 2 To UBound(Bereich, 1)
            If InStr(Zelle, Bereich(i, 1)) Then
               If Bereich(i, 2) = "" Then Ausgeblendet = True
               If Ausgeblendet Then Exit For
            End If
         Next i
         If Ausgeblendet Then Exit For
      Next Bereich
      Zelle.EntireColumn.Hidden = Ausgeblendet
   Next Zelle
   Application.ScreenUpdating = True
End Sub

Wenn nur AAA angehakt ist, wird keine Spalte angezeigt. Es muss schon was dazu gewählt werden, zB KW1.

Bonusrunde:
Folgendes Makro, eingefügt in das Modul der Tabelle1, löst das o.g. Makro bei jeder Haken-Änderung aus. Damit muss man nicht jedes Mal händisch das Makro aufrufen.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
   If Not Intersect(Target, Range("D2:D4,G2:G4,J2:J4,M2:M5")) Is Nothing Then
      SpaltenkontrolleMehrfachAlternative
   End If
End Sub

Proberi es mal aus.
Seiten: 1 2