• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Overlappende perioden splitsen en waarden totaliseren

Status
Niet open voor verdere reacties.

Boboes

Gebruiker
Lid geworden
5 nov 2016
Berichten
45
Hallo,

Ik ben al een tijdje aan het worstelen met het volgende:
Ik heb (maximaal) 5 perioden met een begin- en einddatum. Aan elke periode is een bepaalde waarde gekoppeld. Meestal zijn het gedeeltelijk overlappende periodes. Nu wil ik alle perioden splitsen in nieuwe perioden die opeenvolgend worden weergegeven waardoor er geen overlappingen meer zijn en de bijbehorende waarden per nieuwe periode getotaliseerd worden.

In de bijlage heb ik een voorbeeld geplaatst van wat de bedoeling is. Ik hoop dat iemand mij kan helpen (mag met formules of VBA).
 

Bijlagen

  • Overlapping splitsen.xlsx
    12,1 KB · Weergaven: 20
ik vrees dat er niemand iets zal van begrijpen.


Hoe kom je aan die waarden
 
Ik vrees van wél….
Is eenvoudiger met VBA, maar ik vond de uitdaging met formules groter. Zie bijlage..
 

Bijlagen

  • Overlapping splitsen.xlsx
    162 KB · Weergaven: 25
Beste Conseclusie. Bedankt voor jouw hulp! Dat komt al een heel eind in de richting!
Ik mis nu alleen een aantal perioden omdat in jouw uitkomst perioden met dezelfde totaalwaarde tot één periode worden samengevoegd. Ik heb 2 perioden van 35 en 2 van 5 achter elkaar. Ik kom aan 9 perioden en jij aan 7. Periode/regel 4 heeft overigens een waarde 0 maar die periode zou ook gewoon gesplitst moeten worden.
Mijn prioriteit ligt in 1e instantie bij de splitsing in perioden: dus eerst alle begin- en einddatums per periode/per overlapping. Pas dan daarachter per periode de totale waarde.
 
Code:
Sub Periodes()
    sn = Sheets("blad1").Range("A2:D6")
    With CreateObject("system.collections.arraylist")                'aanmaak van een gesorteerde arraylist
        For i = 1 To UBound(sn)
            .Add sn(i, 2)                                            'voeg begindatum toe
            .Add sn(i, 3) + 1                                        'einddatum +1
        Next
        .Sort                                                        'sorteren
        sp = .toarray                                                'gesorteerde array ophalen
    End With

    ReDim sp1(0 To UBound(sp), 1 To 3)                               '2-dimensionele array aanmaken
    For i = 0 To UBound(sp1) - 1                                     'van de 1e tot de voorlaatste datum
        sp1(i, 1) = sp(i)                                            'nieuwe begindatum
        sp1(i, 2) = sp(i + 1) - 1                                    'nieuwe einddatum
        For j = 1 To UBound(sn)                                      'alle vroegere periodes aflopen
            If Application.Median(sn(j, 2), sn(j, 3), sp1(i, 1)) = sp1(i, 1) Or Application.Median(sn(j, 2), sn(j, 3), sp1(i, 2)) = sp1(i, 2) Then sp1(i, 3) = sp1(i, 3) + sn(j, 4)    'valt begin of einddatum van nieuwe periode in oude periode = optellen
        Next
    Next

    Range("B32").Resize(UBound(sp1), UBound(sp1, 2)).Value = sp1     'uitvoer
End Sub
 
Ik was in de veronderstelling dat het wenselijk was om opvolgende periodes met dezelfde waarde samen te trekken.
Maar heb nu aanpassing aangebracht zodat dit niet gebeurd.
 

Bijlagen

  • Overlapping splitsen.xlsx
    124,3 KB · Weergaven: 20
Twee oplossingen die nu werken! cow18 en Conseclusie, hartstikke bedankt voor jullie hulp! En inderdaad, complimenten voor de compacte VBA-oplossing van cow18. Fijn ook dat er commentaar achter de code staat zodat ik enigszins kan begrijpen wat de code doet.

Nogmaals hartelijk dank voor de oplossingen.

Groet,
Christ
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan