VBA Filter - mehrere Kriterien - über mehrere Tabellenblätter

Dieses Thema im Forum "Visual Basic" wurde erstellt von Sommerliebe, 22 Februar 2017.

  1. Sommerliebe

    Sommerliebe
    Expand Collapse
    New Member

    Registriert seit:
    22 Februar 2017
    Beiträge:
    9
    Zustimmungen:
    0
    Hallo an Alle,

    ich hoffe ihr könnt mir bei meiner Aufgabe helfen, komme leider nicht mehr voran... Es geht um die Stundenmeldungen von Mitarbeitern. Meine Arbeitsmappe besteht aus den Blättern (siehe Anhang Datei) :
    - Übersicht mit Button 1 -> erstelle neuen Mitarbeiter und Button 2-> Starte Übertragung
    - Muster Mitarbeiter -> Beim Betätigen vom Button 1 ensteht immer ein neues Blatt nach dem Blattt Muster MA
    - Januar - Dezember mit fast derselben Tabelle wie in Muster MA
    - TD
    Das Blatt Muster MA beinhaltet eine Tabelle zur Stundenmeldung. Angegeben werden Kostenstelle, Projektname mit dem Anfang "OV" oder "IV" oder "DV" oder "TD", ob das Projekt bereits gebucht wurde mit dem Zeichen "X", Datum, Monat, Text, etc.
    Wenn nun die Mitarbeiter ihre Projekte eintragen und diese mit dem "X" als gebucht markieren, soll mit dem Klick auf "Starte Übertragung" (Sheet "Übersicht") die Filterrung/Kope stattfinden.
    Alle gebuchten Zeilen mit den Projekten "IV" oder "OV" oder "DV" sollen in die entsprechenden Monatsblätter kopiert werden. Alle Projekte mit "TD" in das Sheet "TD".
    Diese Übertragung sollte nach Datum sortiert werden und mit einem Klick für alle Mitarbeiter Blätter aufeinmal automatisch funktionieren.

    Leider bin ich nicht besonders gut in VBA. Habe so einiges ausprobiert. Mein letzter Ansatz war folgender:
    Sub test()
    Dim a As Long, i As Long
    Application.ScreenUpdating = False
    a = 2
    For i = 1 To 10000
    With Worksheets(Mitarbeiter)
    If .Cells(i, "D") = "OV" and
    If.Cells(i,"A")="X" and
    If.Cells(i,"K")="Januar"
    .Rows(i).Copy _
    Destination:=Worksheets("Januar").Rows(a)
    a = a + 1
    End If
    End With
    Next i
    Application.ScreenUpdating = True
    End Sub

    Das sollte natürlich bei einem Klick für alle Mitarbeiter alle Monate aufeinmal funktionieren....
    Wäre dankbar über jede Hilfe :)

    Liebe Grüße
    Jolie
     

    Anhänge:

    #1 Sommerliebe, 22 Februar 2017
    Zuletzt bearbeitet: 22 Februar 2017
  2. Dancer79

    Dancer79
    Expand Collapse
    Member Deluxe

    Registriert seit:
    29 Juni 2002
    Beiträge:
    316
    Zustimmungen:
    0
    So, schau dir mal diese Datei an.
    Neuer Mitarbeiter wird angelegt gemäß den Regeln
    Der Übertrag aus der Mitarbeiter liste wird genacht wenn in Spalte A ein X ist und es wird der Monat angelegt wenn er noch nicht da ist
    Auch wird im Mitarbeiter Ordner gekennzeichnet ob ein DS schon im Monat übertragen wurde
    Auch wird im Monats Ordner gekennzeichnet woher stammt der DS, wann war die Eintragung im Monat und wer hat das Macro gestartet
    In der Übersicht Neu ist via Formel mal was nettes gemacht worden als Beispiel was alles geht SPrich da wo im AUftrag DV steht wurde die Menge * ME gerchnet und als Summe aller Daten für den jeweiligen Monat ausgegeben. Natürlich kann man damit noch viel mehr machen.

    Auch könnte man wenn man nur SUmme Als Endergebnis braucht sich die Monats Mappen sparen und so die Daten direkt aus den Mitarbeiter mappen errechnen in welcher ANsicht dann auch immer ;-)
    Viel Spass
     

    Anhänge:

  3. Sommerliebe

    Sommerliebe
    Expand Collapse
    New Member

    Registriert seit:
    22 Februar 2017
    Beiträge:
    9
    Zustimmungen:
    0
    Hallo Dancer79,

    WOWWWWW :D Hammer!!! Du bist ein Genie! Vielen Dank für deine schnelle Hilfe. Du hast sogar logische Erweiterungen eingebaut! Ich werde mir jetzt den Code anschauen und versuchen alles nachzuvollziehen.

    - Ich habe dem Button "Erstelle MA" in "Übersicht" das Makro "Neues_tabellenblatt()" vom Modul "Rest_Muell" zugewiesen. Unabhängig von dem Namen, den ich in das Fenster für den Mitarbeiter eingebe, erscheint die Meldung, der Name "Monat" sei bereits vergeben und ich solle einen anderen Namen eintragen (obwohl ich das Mitarbeiterblatt nicht "Monat" genannt habe). Kann ich diese Meldung irgendwie umgehen?

    - Bei dem Klick auf den Button "Mitarbeiter" in "Übersicht DV" passiert nichts, außer dass die Namen der zwei vorhanden Mitarbeiter bei jedem Klick immer wieder verdoppelt werden (in Spalte A)... Hab ich da etwas übersehen oder falsch verstanden?? Soll der Button Mitarbeiter als Aktualisierung dienen? Wieso aber werden vorhandene Ma-Namen verdoppelt und verdreifacht? Hoffe du hast meine Frage verstanden...

    - Und noch eine wichtige Frage: Die Projekte mit "TD-" am Anfang sollten alle in ein separates Blatt "TD" kopiert werden, d.h.:
    * Projekte mit "IV"/"OV"/"DV" in Monats-Sheets
    * Projekte mit "TD-" in "TD" (nach Datum sortiert)

    Danke im Voraus und liebe Grüße
    Jolie
     
    #3 Sommerliebe, 24 Februar 2017
    Zuletzt bearbeitet: 24 Februar 2017
  4. Dancer79

    Dancer79
    Expand Collapse
    Member Deluxe

    Registriert seit:
    29 Juni 2002
    Beiträge:
    316
    Zustimmungen:
    0
    Ist eingebaut, wobei ich jetzt etwas geschummelt hab weil ich schau ob das Kürzel ID im Auftrag ist wenn ja dann tausche den Monat gegen TD aus so geht das Macro ncht mehr in den Monat sondern nach TD
    man kann das auch als eleif .... einbauen so dürfte dann auch inhaltlich das anders aussehen wie in einem Monat

    Es gibt also mehrere Möglichkeiten das zu erreichen jenachdem was man genau bezweckt. Wenn man das nur selectieren will ist das ein Weg
     

    Anhänge:

  5. Dancer79

    Dancer79
    Expand Collapse
    Member Deluxe

    Registriert seit:
    29 Juni 2002
    Beiträge:
    316
    Zustimmungen:
    0
    Hier ist das Problem mit de Namen schon vorhanden gelöst. Es gibt Benannte Zellbereiche in den Blanco Mappen scheint ein überbleibsel aus deiner ursprünglichen Mappe zu sein. Bereichsnamen dürfen aber auch nur einmalig sein. Ich habe die Namen alle gelöscht so ist das Problem gelöst. Weil verwendet wurden diese nicht
     

    Anhänge:

  6. Dancer79

    Dancer79
    Expand Collapse
    Member Deluxe

    Registriert seit:
    29 Juni 2002
    Beiträge:
    316
    Zustimmungen:
    0
    Das mit der Überischt war wohl gestern ein gedanken Fehler Mhhhhh Tausch mal den alten Code in der Mappe gegen diesen aus

    Sub Mitarbeiter_ermitteln_Uebersicht_fuellen()
    For m = 1 To ThisWorkbook.Worksheets.Count
    If Left(UCase(Worksheets(m).Name), 3) = "MI-" Then
    AktullerMitarbeiter = Mid(Worksheets(m).Name, 4, Len(Worksheets(m).Name))
    gefunden = 0
    For i = 1 To ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row
    If ActiveSheet.Cells(i, 1) = AktullerMitarbeiter Then
    gefunden = gefunden + 1
    Else
    gefunden = gefunden
    End If
    Next i
    If gefunden = 0 Then
    ActiveSheet.Cells(ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row + 1, 1) = AktullerMitarbeiter
    Else
    End If
    Else
    End If
    Next m

    End Sub

    dann klappt wieder alles

    oder nimm diee DAtei da ist alles nun drin
     

    Anhänge:

  7. Sommerliebe

    Sommerliebe
    Expand Collapse
    New Member

    Registriert seit:
    22 Februar 2017
    Beiträge:
    9
    Zustimmungen:
    0
    WOW WOW WOWWW! Ich bin begeistert!

    Habe es mir angeguckt und alles ausprobiert. Funktioniert super.

    Leider habe ich einn Teil der Aufgabe falsch verstanden. Die "TD-" Projekte sollen nicht nur in in das TD-Sheet sondern auch in den Monats-Sheets landen.

    Und ich wollte fragen, ob es möglich ist, in den Monats-Sheets und im TD-Sheet immer automatisch die entsprechenden Kostenstellen zusammenzufassen (blockweise) und deren Projekte nach Datum sortiert darzustellen? Dann wäre es übersichtlicher, man könnte eine Kostenstelle quasi abhaken und weiter zur nächsten, anstatt nach den einzelnen Zeilen zu suchen.

    Nochmals vielen Dank! Wirklich wirklich!
     
    #7 Sommerliebe, 24 Februar 2017
    Zuletzt bearbeitet: 24 Februar 2017
  8. Sommerliebe

    Sommerliebe
    Expand Collapse
    New Member

    Registriert seit:
    22 Februar 2017
    Beiträge:
    9
    Zustimmungen:
    0
    Vielleicht wäre es auch sinnvoll, wenn man die Kostenstellen pro Monat zusammenfasst, nach Datum sortiert. Dann würden die Kostenstellen blockweise für den Januar untereinander aufgelistet sein und dann würde es mit dem Februar weitergehen. Macht das Sinn?

    so ungefähr:

    KST Zwischeninfos Monat
    123 OV- Januar
    123 IV- Januar
    123 TD-... Januar

    456 DV- Januar
    456 TD- Januar

    789 OV Januar
    789 IV Januar

    123 IV Februar
    ....
     
  9. Dancer79

    Dancer79
    Expand Collapse
    Member Deluxe

    Registriert seit:
    29 Juni 2002
    Beiträge:
    316
    Zustimmungen:
    0
    Kann man alles
     

    Anhänge:

    #9 Dancer79, 24 Februar 2017
    Zuletzt bearbeitet: 24 Februar 2017
  10. Sommerliebe

    Sommerliebe
    Expand Collapse
    New Member

    Registriert seit:
    22 Februar 2017
    Beiträge:
    9
    Zustimmungen:
    0
    Wie hast du denn die Kostenstelle pro Monat nach Datum sortiert zusammengefasst? Geht das nicht auch per VBA? In dem Code konnte ich nichts dazu finden?
    Und könnte man das so machen, dass dadrunter nicht "Ergebnisse 123" steht, sondern dieser Bereich nur durch einen Rahmen/eine fette Linie zw der aktuellen und nächsten Kostenstelle deutlich gemacht wird, dass es zur nächsten Kostenstelle geht?

    Vermutlich hast du Recht. Es gibt andere Wege um zu diesem Ziel zu kommen, aber mir wurde von Anfang an gesagt, die Datei soll mit VBA erstellt werden :/ da ich noch recht neu in dem Bereich bin, kenne ich mich leider nicht mit Pivot-Tabellen und allen Excel-Funktionen aus.
     
  11. Sommerliebe

    Sommerliebe
    Expand Collapse
    New Member

    Registriert seit:
    22 Februar 2017
    Beiträge:
    9
    Zustimmungen:
    0
    Hallo Dancer79,

    ich bin auf dem Stand vom 24.Febrauar geblieben. Von den Funktionen her läuft alles super. Hätte aber zwei Fragen zur Datei:

    Wie bekomme ich es hin, dass die Bereiche pro Kostenstelle nicht durch die Zeile "Ergebnis XY" dargestellt werden, sondern die Tabelle quasi "ohne Unterbrechung" gefüllt ist und die Bereiche pro Kostenstelle jeweils andersfarbig markiert sind oder durch einen fetten Rahmen getrennt sind? (per VBA)

    Und ich wollte fragen, ob es möglich ist, per Dropdown-Menü das gewünschte Monatssheet auszuwählen und dieses in eine andere Arbeitsmappe zu kopieren?

    Danke im Voraus und schönes WE
    LG
    Jolie
     
  12. Sommerliebe

    Sommerliebe
    Expand Collapse
    New Member

    Registriert seit:
    22 Februar 2017
    Beiträge:
    9
    Zustimmungen:
    0
    Hab das mit dem Kopieren in eine andere Arbeitsmappe einigermaßen hinbekommen:

    Code:
    Sub test()
    Dim QWB As Workbook, ZWB As Workbook
    Workbooks.Open "C:\Stundenmeldung_Speicherort\20170224_Stundenmeldung_V2 - Kopie.xlsm"         ' Wenn die Datei erst geöffnet werden muss
    Set QWB = Workbooks("20170224_Stundenmeldung_V2 - Kopie.xlsm")          ' Quelle, aus der die Tabelle41 kopiert werden soll
    Set ZWB = ThisWorkbook                  ' Ziel, Workbook mit diesem Makro
    Dim QWS As Worksheet, ZWS As Worksheet
    
    If ThisWorkbook.ActiveSheet.Range("C3").Value = "Januar" Then
    Set QWS = QWB.Worksheets("2017-01")   ' Quelle
    Set ZWS = ZWB.Worksheets("Tabelle1")    ' Ziel
    QWS.Copy after:=ZWS                 ' oder before
        Workbooks("20170224_Stundenmeldung_V2 - Kopie.xlsm").Close          ' Wenn die Datei wieder geschlossen werden soll
    End If
    
    If ThisWorkbook.ActiveSheet.Range("C3").Value = "Februar" Then
    Set QWS = QWB.Worksheets("2017-02")   ' Quelle
    Set ZWS = ZWB.Worksheets("Tabelle1")    ' Ziel
    QWS.Copy after:=ZWS                 ' oder before
        Workbooks("20170224_Stundenmeldung_V2 - Kopie.xlsm").Close          ' Wenn die Datei wieder geschlossen werden soll
    End If
    
    If ThisWorkbook.ActiveSheet.Range("C3").Value = "März" Then
    Set QWS = QWB.Worksheets("2017-03")   ' Quelle
    Set ZWS = ZWB.Worksheets("Tabelle1")    ' Ziel
    QWS.Copy after:=ZWS                 ' oder before
        Workbooks("20170224_Stundenmeldung_V2 - Kopie.xlsm").Close          ' Wenn die Datei wieder geschlossen werden soll
    End If
    
    If ThisWorkbook.ActiveSheet.Range("C3").Value = "April" Then
    Set QWS = QWB.Worksheets("2017-04")   ' Quelle
    Set ZWS = ZWB.Worksheets("Tabelle1")    ' Ziel
    QWS.Copy after:=ZWS                 ' oder before
        Workbooks("20170224_Stundenmeldung_V2 - Kopie.xlsm").Close          ' Wenn die Datei wieder geschlossen werden soll
    End If
    
    If ThisWorkbook.ActiveSheet.Range("C3").Value = "Mai" Then
    Set QWS = QWB.Worksheets("2017-05")   ' Quelle
    Set ZWS = ZWB.Worksheets("Tabelle1")    ' Ziel
    QWS.Copy after:=ZWS                 ' oder before
        Workbooks("20170224_Stundenmeldung_V2 - Kopie.xlsm").Close          ' Wenn die Datei wieder geschlossen werden soll
    End If
    
    If ThisWorkbook.ActiveSheet.Range("C3").Value = "Juni" Then
    Set QWS = QWB.Worksheets("2017-06")   ' Quelle
    Set ZWS = ZWB.Worksheets("Tabelle1")    ' Ziel
    QWS.Copy after:=ZWS                 ' oder before
        Workbooks("20170224_Stundenmeldung_V2 - Kopie.xlsm").Close          ' Wenn die Datei wieder geschlossen werden soll
    End If
    
    If ThisWorkbook.ActiveSheet.Range("C3").Value = "Juli" Then
    Set QWS = QWB.Worksheets("2017-07")   ' Quelle
    Set ZWS = ZWB.Worksheets("Tabelle1")    ' Ziel
    QWS.Copy after:=ZWS                 ' oder before
        Workbooks("20170224_Stundenmeldung_V2 - Kopie.xlsm").Close          ' Wenn die Datei wieder geschlossen werden soll
    End If
    
    If ThisWorkbook.ActiveSheet.Range("C3").Value = "August" Then
    Set QWS = QWB.Worksheets("2017-08")   ' Quelle
    Set ZWS = ZWB.Worksheets("Tabelle1")    ' Ziel
    QWS.Copy after:=ZWS                 ' oder before
        Workbooks("20170224_Stundenmeldung_V2 - Kopie.xlsm").Close          ' Wenn die Datei wieder geschlossen werden soll
    End If
    
    If ThisWorkbook.ActiveSheet.Range("C3").Value = "September" Then
    Set QWS = QWB.Worksheets("2017-09")   ' Quelle
    Set ZWS = ZWB.Worksheets("Tabelle1")    ' Ziel
    QWS.Copy after:=ZWS                 ' oder before
        Workbooks("20170224_Stundenmeldung_V2 - Kopie.xlsm").Close          ' Wenn die Datei wieder geschlossen werden soll
    End If
    
    If ThisWorkbook.ActiveSheet.Range("C3").Value = "Oktober" Then
    Set QWS = QWB.Worksheets("2017-10")   ' Quelle
    Set ZWS = ZWB.Worksheets("Tabelle1")    ' Ziel
    QWS.Copy after:=ZWS                 ' oder before
        Workbooks("20170224_Stundenmeldung_V2 - Kopie.xlsm").Close          ' Wenn die Datei wieder geschlossen werden soll
    End If
    
    If ThisWorkbook.ActiveSheet.Range("C3").Value = "November" Then
    Set QWS = QWB.Worksheets("2017-11")   ' Quelle
    Set ZWS = ZWB.Worksheets("Tabelle1")    ' Ziel
    QWS.Copy after:=ZWS                 ' oder before
        Workbooks("20170224_Stundenmeldung_V2 - Kopie.xlsm").Close          ' Wenn die Datei wieder geschlossen werden soll
    End If
    
    If ThisWorkbook.ActiveSheet.Range("C3").Value = "Dezember" Then
    Set QWS = QWB.Worksheets("2017-12")   ' Quelle
    Set ZWS = ZWB.Worksheets("Tabelle1")    ' Ziel
    QWS.Copy after:=ZWS                 ' oder before
        Workbooks("20170224_Stundenmeldung_V2 - Kopie.xlsm").Close          ' Wenn die Datei wieder geschlossen werden soll
    End If
    
    End Sub
    Nur würd ichs gerne nicht nur auf das Jahr 2017 beziehen. Müsste also in dem Code nur nach "-01" für den Januar suchen, "-02" für den Februar, etc. Weiß nur nicht wie ich es so richtig machen muss.
     
    #12 Sommerliebe, 10 März 2017
    Zuletzt bearbeitet: 10 März 2017
  13. Sommerliebe

    Sommerliebe
    Expand Collapse
    New Member

    Registriert seit:
    22 Februar 2017
    Beiträge:
    9
    Zustimmungen:
    0
    Und meine Frage wäre immer noch... Wie bekomme ich es hin, dass die Kostenstellen per VBA farbig oder durch Rahmen voneinander getrennt werden? Ohne Zeile "Ergebisse XY" ?

    Hoffe ihr könnt mir helfen...
     
  14. Dancer79

    Dancer79
    Expand Collapse
    Member Deluxe

    Registriert seit:
    29 Juni 2002
    Beiträge:
    316
    Zustimmungen:
    0
    Hi, ich schau mir morgen deine Fragen in ruhe einmal an und meld mich dann.
     
Die Seite wird geladen...

Diese Seite empfehlen