Optellen in loop mits er aan voorwaarden voldaan wordt. VBA in excel.

Status
Niet open voor verdere reacties.

BastS

Gebruiker
Lid geworden
12 mrt 2015
Berichten
52
Hallo,

ik wil een aantal waarden bij elkaar optellen. Dit is normaal gesproken een vrij simpele code. Maar de waarden die ik bij elkaar op moeten tellen staan niet altijd op dezelfde plek. Ik wil de waarden uit B bij elkaar optellen mits ze dezelfde waarde hebben. Deze waarden komen vaker voor in kolom B, ik wil niet alle waarde die hetzelfde zijn, alleen degene die bij elkaar staan, dus had ik bedacht ik tel deze waarden bij elkaar op totdat de waarde veranderd. Ik krijg onderstaande code niet werkend, toch ben ik van mening dat ik er heel dichtbij moet zitten vandaar de vraag kan iemand hier mij mee helpen?

Code:
a = Worksheets("Invoerblad").Range("B9").Value
b = 1

Do Until b > a

    offsetwaarde = 6 + ((b - 1) * 7)
    offsetwaarde2 = 1 + ((b - 1) * 7)
    For Each cl In Sheets("Rekenblad").Range(Cells(3, (8 + ((b - 1) * 7))), Cells(LastRow2, (8 + ((b - 1) * 7))))
        If cl.Offset(, -offsetwaarde) <> cl.Offset(1, -offsetwaarde) Then
        y = 0
        uurwaarde2 = 0
            Do Until cl.Offset(, -offsetwaarde).Value <> cl.Offset(-y, -offsetwaarde).Value
                uurwaarde2 = WorksheetFunction.Sum(uurwaarde2, cl.Offset(-y, -offsetwaarde2).Value)
                y = y + 1
            Loop
            uurwaarde = CSng(uurwaarde2)
        Else
        uurwaarde = 0
        End If
        sn_h = sn_h & uurwaarde & "|"
    Next
    Sheets("Rekenblad").Cells(3, 8 + ((b - 1) * 7)).Resize(UBound(Split(sn_h, "|"))).Value = Application.Transpose(Split(sn_h, "|"))

b = b + 1
Loop

End Sub
 
Bas,

Je code lijkt nog al omslachtig maar ik kan dit niet goed inschatten omdat je de code een aantal keren laat
doorlopen zonder duidelijk te maken hoe het bestand er uit ziet. Zo begrijp ik dat er wat in kolom B en iets
in kolom G moet staan plus nog een aantal kolommen verder, met een interval van 7 kolommen wordt de
code dan doorlopen.
Je kan niet van ons verwachten dat wij een testbestand gaan opstellen om je code te kunnen testen
om er later achter te komen dat dit toch niet echt de bedoeling was.
Graag een voorbeeld bestand.

Veel Succes.
 
Hieronder een voorbeeld bestand, de macro waar ik vragen over had bevind zich in de module verbruiken_filteren.
En dan onder het stukje tekst uurwaarden.

Bekijk bijlage 233493
 
Het blijkt dat als ik mijn datapunten verklein naar 9000 dat het perfect werkt. Is het mogelijk dat er een maximaal aantal waarden aan een array verbonden zitten?
 
Bas,

Het aantal waarden in een array zal denk ik het probleem niet zijn, ik vermoed dat het gebruik van de string het
probleem is, deze heeft een maximale lengte van 63K tekens. En je gebruikt deze om de gegevens te verzamelen.
(sn_h etc.)

Veel Succes.
 
Aan de hand van de website kwam ik erachter dat ik mijn array verkeerd dimensioneerde....:confused:
Ik zie inderdaad dat ik gebruik maak van een string, ik vind dit nu dus eigenlijk geen mooie oplossing meer.
Want ik wil vanuit de array een grafiek maken maar dit geeft errors omdat de waarde gezien worden als tekst.

Stel ik wil het volgende vervangen door een array zonder strings.

Code:
For Each cl In Sheets("Rekenblad").Range("f3", "f" & LastRow)
    sn_e = sn_e & CSng(WorksheetFunction.VLookup((cl.Offset(, -4) + 1), Worksheets("Temperatuur").Range("c2:d" & Sheets("Temperatuur").Cells(Rows.Count, "d").End(xlUp).Row), 2)) & "|"
Next
Sheets("Rekenblad").Range("f3").Resize(UBound(Split(sn_e, "|"))).Value = Application.Transpose(Split(sn_e, "|"))

Ik moet dan kijken bij een 1-dimensionale array die ook een dynamisch bereik heeft.
Dan moet ik hem declareren met ReDim sn_a(1 to "iets wat ik nog niet begrijp")
Code:
for j=1 to ubound(a_sn)
a_sn(j)=thisworkbook.sheets(j).Name
next
Hier wordt er in de lus elke keer een waarde aan toegevoegd deze bevindt zich dan op de plek J.
Als ik achter het "=" teken mijn formules zet kom ik er dan mee weg?

En hoe kan ik mijn array weer "leegschudden" zodat alle waarden in de juiste kolom komen?
 
Ik heb de volgende code:
Code:
 For e = 3 To LastRow2
 sn_g = sn_g & Worksheets("Invoerblad").Cells(e + 14, b + 1) & "|"
 Next e
 Worksheets("Rekenblad").Cells(3, 7 + ((b - 1) * 7)).Resize(UBound(Split(sn_g, "|"))).Value = Application.Transpose(Split(sn_g, "|"))

vervangen door

Code:
ReDim sn_g(LastRow2 - 1)
For e = 0 To UBound(sn_g)
sn_g(j) = Worksheets("Invoerblad").Cells(e + 17, b + 1)
Next e
Worksheets("Rekenblad").Cells(3, 7 + ((b - 1) * 7)).Resize(UBound(Array(sn_g, "|"))).Value = Application.Transpose(Array(sn_g, "|"))

Echter wanneer ik mijn cursor op de array zet zie ik geen waarden de array blijft leeg.
Hij blijft ook een foutmelding geven op de regel die de gegevens in mijn werkblad hoort weg te schrijven.
 
Het is gelukt, kan ik ook een grafiek maken uit een Multi dimensionale array?
Ik heb een 5 dimensionale array kan ik een kolom van deze array invoeren als waarde reeks voor een grafiek?
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan