Waarden optellen die vaker voorkomen

Status
Niet open voor verdere reacties.

Jelle2010

Gebruiker
Lid geworden
14 jan 2010
Berichten
43
Beste experts,

Ik heb een zeer uitgebreide lijst. In deze lijst staan in kolom B de registratienummers en in kolom D het nummer van de soort declaratie en in kolom E het bedrag. Nu zou ik graag willen dat door 1 druk op de knop dat alle bedragen bij elkaar worden opgeteld wanneer de combinatie van het registratienummer en declaratienummer vaker voorkomt. Dus wanneer de combinatie

Ik heb de bijlage toegevoegd van de lijst waarop het wil toepassen. Ik weet dat het met een draaitabel ook zou moeten lukken maar uiteindelijk wil ik alles omzetten naar een CSV bestand omzetten zodat ik het kan importeren in een ander systeem en dit natuurlijk met de zelfde druk op de knop, maar dat gaat me dan wel lukken.

Alvast vriendelijk bedankt voor jullie reactie.

Groeten,

Jelle2010
 

Bijlagen

Laatst bewerkt:
IK heb dit met de formule SUBTOTAAL gedaan.
Je filtert op iets en ziet het totaal.
 

Bijlagen

Laatst bewerkt:
@Wim
2e persoon enkelvoud eindigt nooit op een d, maar op een t

Je filterd op iets en ziet het totaal.

De enige uitzondering is als het persoonlijk voornaamwoord (je) achter het werkwoord komt en de stam van het werkwoord eindigt op d:

dan meld je het volgende
of bind je de kat de bel aan
of brand je er je vingers niet aan
 
snb,

Ik dank je voor de verbeteringen, taal is ook niet mijn sterkste kant maar doe mijn best.

De spelling is sinds ik van school ben al zo vaak veranderd, oplaatst weet je het niet meer.
 
Daarom hanteer ik de voorkeurspelling van 1953; want sindsdien is er niets verbeterd.
 
@ snb

Beste SNB,

Nu het hier toch over spelling gaat en ik geen donateur bent, vraag ik me af waarom u altijd arrays benoemd met sq...

Heeft dit een speciale reden? Niet dat ik me altijd netjes hou aan de benamingen van mijn variabelen, maar sq ben ik eigenlijk nooit tegengekomen.....

Mvg,

Interface
 
IK heb dit met de formule SUBTOTAAL gedaan.
Je filtert op iets en ziet het totaal.

Beste Wim,

Sorry ik ben denk ik wat onduidelijk geweest.

Dit is natuurlijk mogelijk maar zo heb ik het overzicht voor 1 persoon. Mijn doel is om uiteindelijk de boel te exporteren naar een .txt file zodat ik dit kan inlezen in een ander systeem. Hierin wil ik zo weinig mogelijk regels in lezen. Dus ik wil alle bedragen van Karel met de declaratie 7005605 bij elkaar opgeteld hebben. Dit ook voor de bedragen van Karel met de declaratiecode 7081063. En dit ook weer voor alle andere namen etc. Het resultaat is dat per naam maar een aantal regels voor komen met de bedragen per declaratiecode bij elkaar opgeteld.
Normaal kan je dit bereiken door er een draaitabel van te maken maar dit werkt niet aangezien ik het uiteindelijk wil exporteren naar een .txt file. Ik hoop dat mijn doel nu duidelijk is en dat je me nog een keer zou kunnen helpen.
Alvast vriendelijk bedankt.

Jelle2010
 
Nu het hier toch over spelling gaat en ik geen donateur bent, vraag ik me af waarom u altijd arrays benoemd met sq...

Heeft dit een speciale reden? Niet dat ik me altijd netjes hou aan de benamingen van mijn variabelen, maar sq ben ik eigenlijk nooit tegengekomen.....

Mvg,

Interface
@Interface
Geen speciale reden. Omdat de combinatie niet voor iets anders gebruikt wordt kan er geen verwarring ontstaan. Hoe unieker de namen van variabelen hoe sneller duidelijk is waar het om gaat.

Ik gebruik voor matrixen: sq, sp, sn, st, sr (en als die niet voldoende zijn: sv en sz). Dan weet ik meteen dat het om matrixen (arrays) gaat.
Voor tellers in lussen gebruik ik, afhankelijk van de 'nesting': j, jj, jjj etc.
Voor vaste gegevens die tijdens de macro een waarde krijgen c0, c1, c2, etc in volgorde van gebruik.
Voor vaste elementen, die in de macro niet wijzigen (waarvoor anderen soms contanten declareren), gebruik ik c00, c01, c02,c03, etc.

Uiteindelijk zijn het slechts hulpmiddelen om systematisch te kunnen blijven werken. Ik heb zelf een bloedhekel aan lange namen van variabelen: hoe compacter mijn code is hoe prettiger ik hem vind om te lezen en hoe eenvoudiger te 'muggeziften'.
Daarom heb ik gezocht naar zo klein mogelijke namen voor variabelen, waarbij geen verwarring optreedt met andere elementen van VBA en waarbij de naamgeving ook nog iets zegt over het gebruik in de macro.

PS. Evenmin als jij ben ik een financiële donateur van Helpmij; ik beperk me tot intellectuele donaties (die echter geen 'privileges' opleveren).
 
@Jelle

Vermijd het gebruik van samengevoegde cellen.
Ik heb dus de eerste regel van jouw bestand verwijderd.
Daarna deze macro:
Code:
Sub tst()
    Columns(1).AdvancedFilter xlFilterCopy, , Cells(1, 11), True
    sn = Split(Join(WorksheetFunction.Transpose(Cells(1, 11).CurrentRegion), "|0" & vbCr) & "|0", vbCr)

    sq = Cells(1, 1).CurrentRegion
    For j = 2 To UBound(sq)
        c1 = Join(Filter(sn, sq(j, 1) & "|"), "")
        sn = Split(Replace(Join(sn, vbCr), c1, sq(j, 1) & "|" & CSng(Split(c1, "|")(1)) + CSng(sq(j, 5))), vbCr)
    Next

    Open "C:\export.csv" For Output As #1
      Print #1, Replace(Join(sn, vbCrLf), "|", ";")
    Close #1
End Sub
 
@Jelle

Vermijd het gebruik van samengevoegde cellen.
Ik heb dus de eerste regel van jouw bestand verwijderd.
Daarna deze macro:
Code:
Sub tst()
    Columns(1).AdvancedFilter xlFilterCopy, , Cells(1, 11), True
    sn = Split(Join(WorksheetFunction.Transpose(Cells(1, 11).CurrentRegion), "|0" & vbCr) & "|0", vbCr)

    sq = Cells(1, 1).CurrentRegion
    For j = 2 To UBound(sq)
        c1 = Join(Filter(sn, sq(j, 1) & "|"), "")
        sn = Split(Replace(Join(sn, vbCr), c1, sq(j, 1) & "|" & CSng(Split(c1, "|")(1)) + CSng(sq(j, 5))), vbCr)
    Next

    Open "C:\export.csv" For Output As #1
      Print #1, Replace(Join(sn, vbCrLf), "|", ";")
    Close #1
End Sub

Beste SNB,
Super bedankt voor je hulp. Ik krijg alleen bij de volgende regel in de code de volgende foutmelding: Fout 13 tijdens uitvoeren. Typen komen niet met elkaar overeen.

Code:
 sn = Split(Join(WorksheetFunction.Transpose(Cells(1, 11).CurrentRegion), "|0" & vbCr) & "|0", vbCr)

Weet je wat dit probleem veroorzaakt?

Met vriendelijke groet,

Jelle2010
 
Zet de code in de VBA-module van het werkblad met de gegevens.
 
Zet de code in de VBA-module van het werkblad met de gegevens.

Beste SNB,

Wanneer ik deze in de module plak dan werkt het wel inderdaad, bedankt! Jij hebt er nu voor gezorgt dat alle waarden van elke naam bij elkaar worden opgeteld. Alleen mijn bedoeling was om de waarden van elke naam in combinatie met de soort declaratie(die voor komt) bij elkaar op te.

Naam Soortdeclaratie Bedrag
Jop 7005605 Totaal van deze combinatie
Jop 7081600 Totaal van deze combinatie
Jop 7081063 Totaal van deze combinatie
Karel 7005605 Totaal van deze combinatie
Karel 7081600 Totaal van deze combinatie
Karel 7081063 Totaal van deze combinatie
etc. ectc.

Ik hoop dat het duidelijk is
 
@Interface
Geen speciale reden. Omdat de combinatie niet voor iets anders gebruikt wordt kan er geen verwarring ontstaan. Hoe unieker de namen van variabelen hoe sneller duidelijk is waar het om gaat.

Ik gebruik voor matrixen: sq, sp, sn, st, sr (en als die niet voldoende zijn: sv en sz). Dan weet ik meteen dat het om matrixen (arrays) gaat.
Voor tellers in lussen gebruik ik, afhankelijk van de 'nesting': j, jj, jjj etc.
Voor vaste gegevens die tijdens de macro een waarde krijgen c0, c1, c2, etc in volgorde van gebruik.
Voor vaste elementen, die in de macro niet wijzigen (waarvoor anderen soms contanten declareren), gebruik ik c00, c01, c02,c03, etc.

Uiteindelijk zijn het slechts hulpmiddelen om systematisch te kunnen blijven werken. Ik heb zelf een bloedhekel aan lange namen van variabelen: hoe compacter mijn code is hoe prettiger ik hem vind om te lezen en hoe eenvoudiger te 'muggeziften'.
Daarom heb ik gezocht naar zo klein mogelijke namen voor variabelen, waarbij geen verwarring optreedt met andere elementen van VBA en waarbij de naamgeving ook nog iets zegt over het gebruik in de macro.

PS. Evenmin als jij ben ik een financiële donateur van Helpmij; ik beperk me tot intellectuele donaties (die echter geen 'privileges' opleveren).

Helemaal helder(=bedankt voor je uitleg).

Lees vaak code van je en het maakt niet uit wie er reageert, jouw code is altijd het snelst...

Vroeg me daarom af of er nog een bepaalde reden zit achter de benamingen van de variabelen en constanten...

Ik heb niet zo'n probleem met iets langer variabele, probeer tegenwoordig alles in het Engels te doen. Ik kies er altijd voor om de eerste drie letters van het gegevenstype voor de variabele te zetten. In het geval van een array zet ik (afhankelijk van het script) er arr of var voor...

Zie wel dat het vooral om persoonlijke voorkeur gaat, vind het daarbij wel grappig dat iedereen z'n eigen "dialect" heeft. Vraag 10 verschillende mensen om een script, je krijgt dan ook meestal tien verschillende scriptjes, dat maakt het op een bepaalde manier wel leuk om te lezen...

En ik vertik het indd om te doneren, het is niet dat ik helpmij een slecht medium vind, maar hou het net zoals jij bij intellectuele donaties. Daarbij leer ik er vaak ook nog wat van. Ik programmeer namelijk nog niet zo heel erg lang...
 
Hardstikke duidelijk.
Ik ben daarom benieuwd met welke oplossing je komt, nu je 95 % van de oplossing aangereikt hebt gekregen.
 
Hardstikke duidelijk.
Ik ben daarom benieuwd met welke oplossing je komt, nu je 95 % van de oplossing aangereikt hebt gekregen.

Beste SNB,

Ik heb de lijst iets aangepast en ik krijg het volgende resultaat wanneer ik alle unieke combinaties wil bepalen.
Alleen wanneer ik nu verder wil lukt dat niet echt aangezien hij weer op dezelfde wijze vastloopt.

Code:
 Sub tst()
    Columns("A:B").AdvancedFilter xlFilterCopy, , Cells(1, 11), True
    [B]sn = Split(Join(WorksheetFunction.Transpose(Cells(1, 11).CurrentRegion), "|0" & vbCr) & "|0", vbCr)[/B]
    sq = Cells(1, 1).CurrentRegion
    For j = 2 To UBound(sq)
        c1 = Join(Filter(sn, sq(j, 1) & "|"), "")
        sn = Split(Replace(Join(sn, vbCr), c1, sq(j, 1) & "|" & CSng(Split(c1, "|")(1)) + CSng(sq(j, 5))), vbCr)
    Next

    Open "C:\export.csv" For Output As #1
      Print #1, Replace(Join(sn, vbCrLf), "|", ";")
    Close #1
End Sub
.

Zou je nog 1x als je blieft willen helpen?
Met vriendelijke groet,

Jelle2010
 

Bijlagen

Als je uitleg wil over hoe de code werkt: dat kunnen Warme Bakkertje en Trucker het beste uitleggen.
Ik ben uitgegaan van je laatste bestand: 3 kolommen met gegevens.

Code:
Sub tst()
  Columns("E:F").Delete
  Columns("A:B").AdvancedFilter xlFilterCopy, , Cells(1, 5), True
  With Columns(5).SpecialCells(2)
    sn = Split(Join(WorksheetFunction.Transpose(Evaluate("INDEX(REPT(" & .Address & ",1) & REPT(" & .Offset(, 1).Address & ",1),,)")), "|0" & vbCr) & "|0", vbCr)
  End With

  sq = Cells(1, 1).CurrentRegion
  For j = 2 To UBound(sq)
    c1 = Join(Filter(sn, sq(j, 1) & sq(j, 2) & "|"), "")
    sn = Split(Replace(Join(sn, vbCr), c1, sq(j, 1) & sq(j, 2) & "|" & CSng(Split(c1, "|")(1)) + CSng(sq(j, 3))), vbCr)
  Next

  Open "C:\export.csv" For Output As #1
    Print #1, Replace(Join(sn, vbCrLf), "|", ";")
  Close #1
End Sub
 
Beste snb,

Reeds in 1959 heb ik het volgende geleerd: als 'je' vóór het werkwoord staat is het stam plus t.
Dus is het volgens mij: als je uitleg wilt enz..
Bij de derde persoons enkelvoud komt er bij het werkwoord willen geen t achter de stam: hij wil een koekje van eigen deeg.

Groet, Ed
 
@Edwel
Dan was je met je aandacht elders in 1959 ? In het Nederlands mag zowel jij wil als jij wilt.
Wat in ieder geval niet juist is: derde persoons enkelvoud. ;)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan