VBA: Vergleichen mit mehreren Bedingungen
#1
Hallo an alle,

Lebt dieses Forum noch?

Würde gern um eure Unterstützung hoffen bzgl. einer VBA Fragestellung.

VG
Memo
Top
#2
Hallöchen,

klar leben wir noch - vor allem im Excel-Forum. Also, immer her mit der Frage ...
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#3
Super danke für die prompte Rückmeldung.

Also folgender Sachverhalt:


Ich habe eine 15mb große Pivot Tabelle in der verschiedene Daten stehen. Diese Pivot Datei wird jede Woche neu erstellt. Mit dieser neu erstellten Datei wird diese 1 x die Woche analysiert, d.h. jede Woche wiederkehrende Ausführungen. Mit Excel Formeln habe ich mein Ziel nicht einmal ansatzweise hinbekommen. Ich hoffe Ihr könnt mir dabei helfen.

Beim Ausführen des Makros soll diese folgendes tun:

Betrachte Bereich M4 bis M5000.
Lese erstmal M4 aus. Wenn in M4 "IL2" steht dann springe zu Nebenspalte von IL2 (also zu CD), Wenn in M4 "IL3" steht dann springe zu Nebenspalte von IL3 (also zu CF), Wenn in M4 "IL4" steht dann springe zu Nebenspalte von IL4 (also zu CH), Wenn in M4 "IL5" steht dann springe zu Nebenspalte von IL5 (also zu CJ),  und vergleiche das Datum welches in dieser Zelle steht mit dem aktuellen Datum + 1 Monat.

Wenn das Datum in dieser Zelle das aktuelle Datum + 1 Monat übersteigt, dann nichts unternehmen. Wenn es nicht übersteigt, dann komplette Zeile gelb füllen.
IL1, IL6 sowie ILx ignorieren.

Diese Prozedur soll für alle Zellen bis M5000 gelten, sofern in diesen Zellen etwas steht also (IL2, IL3, IL4, IL5)

Beispiel aus der angefügten Datei:

Zelle M4 ist IL3. Also springe zu CF4 und lese Datum aus. Wenn dieses Datum kleiner als heute+1 Monat dann komplette Zeile Gelb füllen. Wenn nicht dann nichts tun.
Am Schluss alle Gelb markierten Zeilen als neuen Tabellenblatt in derselben Datei kopieren mit derselben Überschriften und Formatierung, also Zeile 1,2 und 3 direkt so übernehmen.
Und am Ende soll der User durch Eingabeabfrage den Namen des Tabellenblatts vergeben.

Da ich erst neu in der VBA Welt bin, hoffe ich dass ich mich verständlich genug ausgedrückt habe. Blush

Anbei die Pivot Tabelle runtergebrochen auf wenige KB.

Danke an alle die etwas beitragen und sich Zeit nehmen.   :15: :100:

Grüße ausm Schwabenland
Memo


Angehängte Dateien
.xlsx   Pivo_minimisiert_Memo.xlsx (Größe: 16,79 KB / Downloads: 6)
Top
#4
Moin

Da ist keine Pivot-Tabelle.
Wir sehen uns!
... Detlef

Meine Beiträge können Ironie oder Sarkasmus enthalten.

Top
#5
Hi,

ja. die Pivot Tabelle habe ich kopiert und als Werte hinzufügen als neue Datei gespeichert.

Die Pivot ist viel zu groß um es zu schicken.

Die Excel welches ich hochgeladen habe ist exact der Pivot Tabelle nachgestellt nur mit wenigen Zeilen.


Grüße
Memo
Top
#6
Ich würde grundsätzlich mit den Quelldaten arbeiten. Es sieht nicht so aus als ob in der Pivot irgendwas aggregiert wird. Vermutlich geht es nur um eine bestimmte Darstellung/Sortierung der Spalten.

Vermutlich könnte man das mit PQ erledigen. Bei Excel 2010 muss man ausprobieren ob das AddIn geladen werden kann. Erst ab Excel 2016 ist PQ integriert.
Wir sehen uns!
... Detlef

Meine Beiträge können Ironie oder Sarkasmus enthalten.

Top
#7
Hallo Memo,

im anderen Forum hast du das Problem auch gehabt, du suchst eine Lösung für dein Pivot und nicht für eine normale Excel-Tabelle.
Das sind zwei verschiedene Paar Schuhe. Im anderen Forum wurde Dir ja auch eine Lösung für die Normale Tabelle geboten, die Ja auch funktioniert hat aber eben nicht für die Pivot!

Deswegen mein Tipp an Dich, Leere Die Datei bis auf ein Paar Zahlen, damit diese nicht mehr so groß ist und stelle diese hier rein mit der entsprechend Pivot, die du ja bearbeiten willst!!!

Sonst bringt es Dir, wie im anderen Forum am Ende auch nichts und die Leute hier machen sich die Arbeit umsonst!

LG
Alexandra
Top
#8
Hi,

Diese AddIn kann bei mir leider nicht geladen werden.

Ich habe bereits eine ungefähre Lösung als VBA aber die funktioniert irgendwie nicht so wie gewünscht.

Zuerst kommt die Fehlermeldung loLetzteZ nicht definiert. Nachdem ich diese als Dim loLetzteZ as Long definiere, dann funktioniert es, jedoch tut nicht alle notwendigen Zeilen Gelb färben/füllen.

Kannst du vielleicht hier den Fehler finden warum das nicht alle Zellen von M4 bis M5000 mit den Bedingungen überprüft?

Sub Filtern()
Dim raZelle As Range, raZielzelle As Range
Dim daDatum As Date, loLetzte As Long

daDatum = DateSerial(Year(Date), Month(Date) + 1, Day(Date))

Application.ScreenUpdating = False

With Worksheets("Tabelle1")
    loLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row
    For Each raZelle In .Range("M4:M" & loLetzte).SpecialCells(xlCellTypeConstants)
        Select Case raZelle.Value
            Case "IL2", "IL3", "IL4", "IL5"
                Set raZielzelle = .Range("2:2").Find(what:=raZelle.Value, _
                LookIn:=xlValues, lookat:=xlPart)
                If Not raZielzelle Is Nothing Then
                    If .Cells(raZelle.Row, raZielzelle.Column + 1) < daDatum Then
                        raZelle.EntireRow.Interior.ColorIndex = 6
                    End If
                End If
            Case Else
        End Select
    Next raZelle
    .Columns("C:P").Hidden = False
    .Range("$A$3:$Z$" & loLetzte).AutoFilter Field:=1, Criteria1:=RGB(255, 255, 0), _
    Operator:=xlFilterCellColor
    With .AutoFilter.Range
        .Resize(.Rows.Count - 1).Offset(1, 0).Copy
    End With
    With Worksheets("Tabelle2")
        loLetzteZ = .Cells(.Rows.Count, 1).End(xlUp).Offset(1).Row
        If .Cells(1, 1) = "" Then loLetzteZ = 1
        .Cells(loLetzteZ, 1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
        Application.CutCopyMode = False
    End With
    .Columns("C:P").Hidden = True
    .AutoFilter.ShowAllData
End With

Application.CutCopyMode = False
Set raZielzelle = Nothing
End Sub
Top
#9
Hi Alexandra,

Ich tue ja die Pivot Tabelle komplett kopieren und als Werte in eine neue Excel File einfügen und dann über diese die VBA laufen lassen.

Die Lösung die du meinst, die funktioniert haben soll, funktioniert nur bis zu einer bestimmten Anzahl an Zeilen.

Diese "funktionierende" VBA Code tut leider nicht alle 5000 Zeilen oder alle Zellen in denen etwas drinsteht ( in dem Fall 2184 Zellen/Zeilen) durchlaufen, und somit bringt er mir nur eine gewisse Anzahl an gelben Zeilen.

Wieso ist das so?

Ich verstehe ja wenn einige VBA Kenner der Meinung sind, dass eine Pivot Tabelle mit einem VBA nicht zu analysieren geht weil die Daten von der Pivot auf andere Datenquellen zugreifen.

Jedoch repliziere ich ja die Pivot 1:1 in eine andere Makrolose ExcelDatei. Warum funktioniert dieser VBA nicht hier?

Grüße und Danke für deine Interesse

Memo
Top
#10
Hi Memo,

weil man eine normale Tabelle anders per VBA anspricht als eine Pivot?

LG
Alexandra
Top


Gehe zu:


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