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)
gleich mal was ins Auge sticht - da hast Du bei der Schleife etwas zu viel aufgetragen 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.
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.
28.08.2020, 12:18 (Dieser Beitrag wurde zuletzt bearbeitet: 28.08.2020, 12:18 von SemmyW.)
(28.08.2020, 11: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.
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.
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:1 Nutzer sagt Danke an Raoul21 für diesen Beitrag 28 • SemmyW