Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Anzeigen wenn Haken gesetzt
#11
(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)
Trial and Error

“It is common sense to take a method and try it. If it fails, admit it frankly and try another. But above all, try something.”
Franklin D. Roosevelt
Antworten Top
#12
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)
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#13
(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!
Trial and Error

“It is common sense to take a method and try it. If it fails, admit it frankly and try another. But above all, try something.”
Franklin D. Roosevelt
Antworten Top
#14
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
Antworten Top
#15
(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.


Angehängte Dateien
.xlsm   Test-AnzeigenWenn.xlsm (Größe: 29,12 KB / Downloads: 3)
Trial and Error

“It is common sense to take a method and try it. If it fails, admit it frankly and try another. But above all, try something.”
Franklin D. Roosevelt
Antworten Top
#16
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?
Antworten Top
#17
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!
Trial and Error

“It is common sense to take a method and try it. If it fails, admit it frankly and try another. But above all, try something.”
Franklin D. Roosevelt
Antworten Top
#18
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.
[-] Folgende(r) 1 Nutzer sagt Danke an Raoul21 für diesen Beitrag:
  • SemmyW
Antworten Top


Gehe zu:


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