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
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.
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
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, 11:18 (Dieser Beitrag wurde zuletzt bearbeitet: 28.08.2020, 11:18 von SemmyW.)
(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.
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
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
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