Excel Makro soll bestimmte Zellen in neues Datenblatt einfügen und nach Datum und Alphabet sortieren - Hilfe!

  • Excel

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von ftzdOp.

    Excel Makro soll bestimmte Zellen in neues Datenblatt einfügen und nach Datum und Alphabet sortieren - Hilfe!

    Schönen guten Abend,

    ich brauche eure Hilfe und habe folgende Problemstellung zu lösen an der ich seit einiger Zeit an einer Lösung bastel aber nicht so recht weiter komme.

    Im Anhang befindet sich ein Screenshot vom Aufbau meiner Excel Datei in der täglich verschiedene Daten eingegeben werden sollen und per Button in ein separates Datenblatt (siehe Anhang) transferiert werden sollen.

    Dazu sollen die Namen in der Zelle B4 bis B9 jeweils mit der Zahl aus H3 und dem Datum aus L3 in dem separatem Datenblatt abgelegt werden. Die abgelegten Daten sollen fortlaufend und chronologisch nach Name versehen mit Datum (L3) und Wert aus H3 abgelegt sein. Wenn ein Name bereits existiert soll der neue Eintrag nach dem letzten Erfolgen und ansonsten alphabetisch einsortiert und eingefügt werden. Kann mir bei dieser Thematik irgendwer von euch weiterhelfen?

    Mein VBA Code sieht bislang wie folgt aus:


    Visual Basic-Quellcode

    1. Sub Speichern_und_Übertragen()
    2. ' Überträgt und speichert die Daten in der Auswertung
    3. ' Definiton der Variablen
    4. Dim Quelltab As Worksheet
    5. Dim Zieltab As Worksheet
    6. Dim Zelle As Range
    7. Dim Zaehler As Long
    8. Dim letztezeile As Long
    9. Zaehler = 2 ' Gibt die Zeile an ab der die Daten abgelegt werden
    10. Bereich = "B4:B9"
    11. Set Quelltab = ActiveWorkbook.Worksheets("Eingabemaske")
    12. Set Zieltab = ActiveWorkbook.Worksheets("Auswertung")
    13. For Each Zelle In Quelltab.Range("B4:B9")
    14. ' Gibt die Spalte an, in der der Bereich geschrieben wird
    15. ' -> Bereich der Ablage muss überarbeitet werden damit die Daten in den richtigen Spalten abgelegt wird!
    16. Zieltab.Cells(Zaehler, 1) = Zelle
    17. Zaehler = Zaehler + 1
    18. Next Zelle
    19. ' Gibt die erfolgreiche Übertragung der Daten aus
    20. MsgBox "Die Datensätze wurden übertragen"
    21. End Sub


    Vielleicht kann mir ja irgendwer weiterhelfen. ?( :thumbsup:
    Bilder
    • Aufbau_Exceldatei.JPG

      85,64 kB, 951×609, 415 mal angesehen
    • Separates Datenblatt.JPG

      30,65 kB, 579×291, 232 mal angesehen
    Vllt. so in dem Rahmen?: Regel für das Sortieren erstellen, bei speichern den Datensatz an die Tabelle unten anfügen und dann die Sortieren erneut ausführen.
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    Also ich hatte mir den Aufbau wie folgt überlegt:

    Daten werden in die Maske eingegeben und der "Speicher und Übertragen Button" gedrückt.

    Für das Makro dann:

    - Füge die Daten in die erste leere Zeile des Auswertungsdatenblattes (-> keine Ahnung)
    - anschließend sortiere die Daten zuerst nach Alphabet und Datum (-> keine Ahnung)
    - Gebe über MsgBox die Info das die Daten gespeichert und sortiert wurden (-> kein Problem)
    - Lösche die eingegebenen Daten aus der Eingabemaske (-> kein Problem)
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    ... das mit der ersten leeren Zelle und dem sortieren hat schonmal wunderbar geklappt. Gerade hackt es noch ein wenig bei folgendem:

    ich möchte hinter den Namen jeweils automatisch die Werte aus Zelle H3 und L3 mitkopieren und den jeweiligen Namen mit den Werten in einer Zeile stehen haben?

    kann dabei nochmal jemand helfen?

    Mein Programmcode sieht wie folgt aus:

    Visual Basic-Quellcode

    1. Sub TESTTEST()
    2. ' Überträgt und speichert die Daten in der Auswertung
    3. ' Definiton der Variablen
    4. Dim copySheet As Worksheet
    5. Dim pasteSheet As Worksheet
    6. Dim lastrow As Long
    7. Application.ScreenUpdating = False
    8. Set copySheet = Worksheets("Eingabemaske")
    9. Set pasteSheet = Worksheets("Auswertung")
    10. copySheet.Range("B4:B9").Copy
    11. pasteSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
    12. Application.CutCopyMode = False
    13. Application.ScreenUpdating = True
    14. ActiveWorkbook.Worksheets("Auswertung").Sort.SortFields.Clear
    15. ActiveWorkbook.Worksheets("Auswertung").Sort.SortFields.Add Key:=Range("A2:A650000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    16. With ActiveWorkbook.Worksheets("Auswertung").Sort
    17. .SetRange Range("A1:D650000")
    18. .Header = xlYes
    19. .MatchCase = False
    20. .Orientation = xlTopToBottom
    21. .SortMethod = xlPinYin
    22. .Apply
    23. End With
    24. End Sub
    du könntest nachfolgend, also nach der Zeile 17 in dem geposteten Code deine Zelle/Zellen Selektieren und da einfach dein Datum und dein OEE anhängen.
    schlauer wäre es, einen Range zu erstellen, die Daten aus copySheet.Range(x:y) darin einzufügen und dann die Werte dort ändern. Somit musst du nur den veränderten Range pasten ohne nochmal in deinem anderen Sheet rumzuwurschteln.
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    Wieso formatierst Du nicht einfach die Ausgabedaten als Tabelle ?
    Einfach die kompletten Daten markieren und dann im Tab "Start" den Button "Als Tabelle formatieren" klicken. Da hast Du doch alles, was Du willst. Das Selektieren und Formatieren kannst Du natürlich auch per VBA machen.

    BTW: Solche Daten gehören definitiv nicht in ein Excel File, mindest ACCESS aber eigentlich ein SQL-Server. Und, Nein der kostet nichts. Die vollkommen ausreichende Express-Edition ist kostenlos. Das Frontend, dann ACCESS.
    Hilfreiche Antworten als solche zu Kennzeichnen wäre klasse 8-)