Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Wie kann ich Datums-Einträge agreggieren?
#1
Hallo zusammen

Ich muss jeweils ziemlich aufwändig eine Liste mit Datumseinträgen je Mitarbeiter und Organisationseinheit so zusammenfassen, dass keine redundaten Einträge mehr enthalten sind resp. dass mehrfache Datumseinträge je Organisationseinheit Datumsmässige zusammengefasst werden (siehe EXCEL Tab SOLL im Anhang). Gibt es hier eine Formel, mit welcher ich die entsprechenden EInträge zusammenfassen kann, damit der manuelle Aufwand kleiner wird (die Liste umfasst jeweils über 30'000 EInträge). Für eure Unterstüzung bedanke ich mich herzlich.
fraenzu


.xlsx   Aggregation_Datum.xlsx (Größe: 405,2 KB / Downloads: 12)
Antworten Top
#2
Hallo fraenzu,

das geht am Besten durch ein kleines Programm. Siehe Anlage.

Wichtig ist, dass die Eingangsdaten nach "PersNr", "OrgEinh." und erst dann nach "Beginn" geordnet sind.


Das Programm arbeitet mit zwei benannten Bereichen:
1) "Daten"
Der Bereich in dem die Eingangswerte sind.
2)"Ausgabe"
Die Zelle, ab der die Ergebnisse geschrieben werden.

Durch die Nutzung der Namen kann man die Bereiche beliebig in der Datei positionieren ohne das Programm ändern zu müssen.
Wenn dir das nicht gefällt must du nur in den ersten zwei Zeilen des Programms die Namensermittlung durch feste Addressen ersetzen.



Code:
Private Sub cbAggregieren_Click()

Dim varDaten As Variant
Dim intSpalte As Integer
Dim intAnzSpalten As Integer
Dim lngOffset As Long
Dim lngZeile As Long
Dim lngDruckZeile As Long
Dim rngAusgabe As Range

varDaten = ThisWorkbook.Names("Daten").RefersToRange.Value
Set rngAusgabe = ThisWorkbook.Names("Ausgabe").RefersToRange

intAnzSpalten = UBound(varDaten, 2)
lngOffset = 0
lngDruckZeile = 1

For lngZeile = 2 To UBound(varDaten, 1)
    If varDaten(lngZeile, 1) = varDaten(lngDruckZeile, 1) And _
        varDaten(lngZeile, 4) = varDaten(lngDruckZeile, 4) And _
        varDaten(lngZeile, 6) <= varDaten(lngDruckZeile, 7) + 1 Then
        If varDaten(lngZeile, 7) > varDaten(lngDruckZeile, 7) Then
            varDaten(lngDruckZeile, 7) = varDaten(lngZeile, 7)
        End If
    Else
        For intSpalte = 1 To intAnzSpalten
            rngAusgabe.Offset(lngOffset, intSpalte - 1) = varDaten(lngDruckZeile, intSpalte)
        Next intSpalte
        lngOffset = lngOffset + 1
        lngDruckZeile = lngZeile
    End If
Next lngZeile
For intSpalte = 1 To intAnzSpalten
    rngAusgabe.Offset(lngOffset, intSpalte - 1) = varDaten(lngDruckZeile, intSpalte)
Next intSpalte
End Sub


Angehängte Dateien
.xlsm   Aggregation_Datum.xlsm (Größe: 417,88 KB / Downloads: 5)
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





Antworten Top
#3
Hallo Ego

dass sieht ja genau so aus wie ich es benötige, herzlichen Dank, Ego :18: : Ich habe noch eine Frage zum Code: Die Werte in lngZeile sind die Werte der Spaltnepositionen Pers.Nr, OrgEinh sowie Von- Bis-Datum? Ich habe versucht, diese auf meine definitive Listenstruiktur anzupassen erhalte aber eine Fehlermeldung (bin leider kein VBA-Spezialist): Ich habe dir noch die definitive Listenstruktur im Anhang beigefügt. Könntest du mir evtl. den Code auf diese Liste anpassen, das wäre wirklich sehr hilfreich. Ich bedanke mich schon jetzt ganz herzlich für deinen Support, das hilft mit enorm Zeit zu sparen.
Herzliche Grüsse
Fraenzu

.xlsx   Aggregation_Datum_V2.xlsx (Größe: 10,21 KB / Downloads: 4)
Antworten Top
#4
Hallo fraenzu,

das Programm übernimmt jetz auch die Kopfzeile und die auszuwertenden Spalten sind angepasst.
Wenn sich an der Position der Spalten etwas ändert, brauchst du nur noch die Konstanten im Deklarationsteil anpassen.

Da du meinen Hinweis mit den Namen wohl nicht verstanden hast, habe ich die Addressierung der Lese- und Schreibbereiche geändert.
Der alte Text muss jetzt in der ersten Zelle des Blattes "Daten" beginnen.
Der neue Text wird ab der ersten Zelle des Blattes "Ausgabe" geschrieben.


Angehängte Dateien
.xlsm   Aggregation_Datum_V2.xlsm (Größe: 23,17 KB / Downloads: 2)
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





Antworten Top
#5
Hallo Ego

Ich habe die angepasste Version der Prozedur nun 'scharf' laufen lassen und das Ergebnis sieht sehr gut aus: Ich möchte mich für deine Unterstützung herzlich bedanken :18:
Das hat mit sehr geholfen.

Herzliche Grüsse
Fraenzu
Antworten Top


Gehe zu:


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