Optellen van kolommen met waarden

  • Onderwerp starter Onderwerp starter WinM
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

WinM

Gebruiker
Lid geworden
10 okt 2009
Berichten
17
Hallo VBA deskundigen,

Ik heb de volgende vraag al bij het Excel gedeelte van dit forum gesteld, maat daar heb ik geen oplossing kunnen vinden.

Mijn probleem is het volgende:
Ik wil in een database door middel van een macro een regel invoeren en vervolgens in deze regel de bovenliggende waarden in aan te wijzen kolommen laten optellen.
Binnen Excel is hiervoor de AutoSom functie beschikbaar, maar deze werkt niet in een macro.

Wat ik feitelijk nodig heb is een programmaregel om d.m.v. een END-PgUp commando de waarden tot aan de eerstvolgende lege cel te selecteren en op te tellen.

Is er iemand met een oplossing?

Wim
 
Zet een voorbeeldbestand hier neer.
 
Totalen in kolommen II

Bijgaand een bestandje met de macro zoals ik hem wil uitvoeren.
Het gaat mis omdat in regel 5 en 7 van de macro met een waarde -3 wordt gwerkt.
Daar zou dus op een of andere manier moeten worden ingegeven dat het gaat om het totaal van de eerste bovenliggende cel tot de volgende lege bovenligggende cel.

Ik wacht met spanning af.

groet

Wim M
 

Bijlagen

Code:
Sub Macro1()
  For Each ar In Columns(3).SpecialCells(2).Areas
    With ar.Resize(1).Offset(ar.Cells.Count)
      .Value = "=sum(" & ar.Address(, False) & ")"
      .Resize(, 2).FillRight
    End With
  Next
End Sub
 
Totalen in kolommen III

Gelukkig zijn er mensen die echt verstand hebben VBA, je macro werkt perfect en heeft een groot probleem voor me opgelost,hartelijk bedankt!

Jouw snelle oplossing geeft me de moed om je met betrekking tot dezelfde datbase nog een vraag voor te leggen:
Ik zou graag het invoegen van de regels afhankelijk willen stellen van verticale toetsing van de inhoud van een cel in een te defnieren kolom, m.a.w. zodra de inhoud van een cel in deze kolom wijzigt zou het invoegen van de regels moeten gebeuren.

Heb je daar ook een oplossing voor?

Mvrgr

WimM
 
Je laatste vraag is te aspecifiek voor een antwoord.
Graag concretisering (welke kolom, welke waarde, etc.) + voorbeeld.
 
Totalen in kolommen IV

Ik heb in het bijgaande bestandje aangegeven wat de bedoeling is,
ik hoop dat je er uit komt.

Bedankt voor je moeite en snelle reacties.

WimM
 

Bijlagen

Moet lukken met:

Code:
Sub tst()
  sq = UsedRange
  For j = 2 To UBound(sq) - 1
    If sq(j, 1) <> sq(j + 1, 1) Then c0 = c0 & j + 1 & "|"
  Next
  sq = Split(c0, "|")
  For j = UBound(sq) - 1 To 0 Step -1
    Rows(sq(j)).Insert
  Next
End Sub
 
Totalen in kolommen V

Opnieuw bedankt voor de snelle reactie, ik krijg echter bij het uivoeren de volgende foutmelding:

"Fout nr. 13 Tiijdens uitvoering
Typen komen niet met elkaar overeen"

De foutopsporing geeft aan dat e.e.a zich voordoet in de roodgemerkte regel:

Sub tst()
sq = UsedRange
For j = 2 To UBound(sq) - 1
If sq(j, 1) <> sq(j + 1, 1) Then c0 = c0 & j + 1 & "|"
Next
sq = Split(c0, "|")
For j = UBound(sq) - 1 To 0 Step -1
Rows(sq(j)).Insert
Next
End Sub

Heb je nog een idee? (Wellicht ten overvloede maar de celinhoud kan zowel numeriek als alfanumeriek zijn)
Bedankt maar weer,

WimM
 
Svp VBA-code tussen code tags (#) zetten.
Heb je deze code toegepast op het bestand dat je plaatste ? Wees slim en doe wat in mijn ondertekening staat: verwijder alle lege werkbladen.
pas zonodig de code aan :
Code:
Sub tst()
  sq = [COLOR="Red"]Thisworkbook.sheets(1).[/COLOR]UsedRange
  For j = 2 To UBound(sq) - 1
    If sq(j, 1) <> sq(j + 1, 1) Then c0 = c0 & j + 1 & "|"
  Next
  sq = Split(c0, "|")
  For j = UBound(sq) - 1 To 0 Step -1
    Rows(sq(j)).Insert
  Next
End Sub
 
Laatst bewerkt:
Totaal in klommen V

Ben ik weer:

In het testbestandje werkt de instructie goed, in de "echte" database worden er op vreemde plekken regels ingevoerd, en gebeuren er meer vreemde dingen.

Als je bereid bent om nog meer tijd in mijn probleem te steken zou ik een kopie van het originele bestand kunnen sturen, maar dat is 215Kb groot en kan dus niet als bijlage aan dit bericht gekoppeld worden.

Ik zou eea rechtstreeks kunnen mailen, maar ik weet niet wat gebruikelijk is op deze site als het gaat om het uitwisselen van Email adressen.

Ik wacht af,

WimM
 
Zoek ook alle VBA-termen (Thisworkbook, Usedrange) op in de hulp van de VBEditor totdat je de code begrijpt die je gebruikt.

Verwijder alle samengevoegde cellen.

Als jij beschrijft wat er in het 'echte' bestand gebeurt komen we ook al een heel eind.
Bijvoorbeeld: wat gebeurt er bij de eerste inhoudswisseling in kolom A.
Plaats zonodig de eerste 30 regels van het bestand, waarin gevoelige gegevens vervangen zijn door andere.
 
Totalen in kolommen VI

Na het verwijderen van samengevoegde cellen worden de regels toegevoegd maar de actie vindt plaats van onder naar boven.
Hierdoor worden tussen de kolomtekst en de kopregel ook regels tussen gevoegd.
Wenselijker is dus om van boven naar onder te werken, maw de waarde in de cel moet worden vergeleken met de waarde in de volgende onderliggende regel, is de waarde niet meer gelijk dan zou de regel moeten worden ingevoegd.
(Mijn doel is als dit lukt om de macro die de subtotalen invoegt uit te laten voeren zodra de inhoud van de cel wijzigt, maar dat vermoeden had je misschien al).
Is eea aan te passen?

Bvd
 
Zoals je kunt zien in de code, wordt van boven naar onder de plaats bepaald om een regel toe te voegen.
De feitelijke toevoeging gebeurt natuurlijk van onder naar boven, omdat anders de rij-aanduiding niet meer klopt.
Als de struktuur van het 'echte' bestand afwijkt van het bestand op basis waarvan de macro is gemaakt moet je niet verbaasd zijn dat er iets anders gebeurt dan je wil.
Zonder kennis van de struktuur van het 'echte' bestand kan ik daar niets over zeggen.
 
Ik merk dat mijn parate kennis van VBA tekort schiet :confused:om de codes zoals jij ze aangeeft te doorgronden. Ik heb mij inmiddels "VBA voor dummies" aangeschaft om mij wat theorie eigen te maken.
Ik ga kijken of ik in combinatie met de door jou aangedragen codes de zaken kan combineren, maar wellicht doe ik in een later stadium nog een keer een beroep op je.
Vooralsnog bedankt voor je adviezen.:thumb:

:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan