VBA code om cellen bij elkaar op te tellen

Status
Niet open voor verdere reacties.

Xammy39

Gebruiker
Lid geworden
29 nov 2017
Berichten
41
Mijn vraag is waarschijnlijk simpel te beantwoorden maar zelf kom ik er niet uit.
Ik ben bezig een pakbon sheet te maken voor mijn geluidsverhuur afdeling. Hier wil ik, bij grotere producties met meerdere podia per podium een aantal invullen wat er nodig is van een bepaald item. Hiervoor heb ik drie kolommen naast elkaar gemaakt die ik apart een naam geef, bijvoorbeeld zaal 1, 2 en 3 met daarnaast nog een kolom met het totale aantal. Na invullen kan ik middels een VBA per zaal en van het totaal een pakbon genereren. Alleen is er nu de beperking van 'slechts' drie podia, dit wil ik op de volgende manier oplossen:
Ik wil een knop maken waarbij de aantallen in de kolommen van de eerste twee podia bij de aantallen van het derde podium gevoegd worden waarna de eerste twee kolommen leeg gemaakt worden zodat ik hier opnieuw aantallen in kan vullen.
Wie zou mij hiermee kunnen helpen?

Bij voorbaat dank.

Om een en ander te verduidelijken hier een plaatje van de sheet.
Schermafbeelding 2017-11-29 om 19.37.09.png
 
Laatst bewerkt:
Een plaatje is niet geschikt om een gerichte code te schrijven.

Code:
Sub hsv()
Dim sv, i As Long
sv = Cells(1).CurrentRegion.Resize(, 10)
For i = 4 To UBound(sv)
   sv(i, 10) = sv(i, 10) + sv(i, 8) + sv(i, 9)
   sv(i, 8) = ""
   sv(i, 9) = ""
 Next i
 Cells(1).Resize(UBound(sv), 10) = sv
End Sub
 
Maak een tabel en begin in A1 zonder lege rijen.
 

Bijlagen

  • Voorbeeld pakbon.xlsb
    13,3 KB · Weergaven: 55
Dankjewel Harry, kan dit ook zonder dat de kolommen een tabel zijn?
 
Dat kan ook.
Code:
Sub hsv()
Dim sv, i As Long
sv = Cells(1).CurrentRegion.Resize(, 6)
    For i = 2 To UBound(sv)
       sv(i, 6) = sv(i, 3) + sv(i, 4) + sv(i, 5) + sv(i, 6)
       sv(i, 3) = ""
       sv(i, 4) = ""
       sv(i, 5) = ""
     Next i
 Cells(1).Resize(UBound(sv), 6) = sv
End Sub
 
Wederom hartelijk dank Harry.
Het werkt nu, het gaat bij mij om de kolommen G, H, I en het totaal in J ofwel 7, 8, 9 en 10. Neveneffect is dat ik alle formules in de voorgaande kolommen kwijt ben.
Volgens mij komt die door het laatste commando "Cells(1).Resize(UBound(sv), 10) = sv", alleen kom ik er niet uit hoe ik dit kan voorkomen.

Bij voorbaat dank,

Sander
 
Plaats een gelijkend bestand.
Nu is het weer 7,8,9 en 10 met formules.
In je voorbeeld gaat het om 3,4,5 en zes zonder formules.

Dat je er zelf niet moe van wordt.
 
Beste Harry,

Dit is inderdaad ook voor mij vermoeiend, het is alleen veel werk om een deel van de sheet met formules en al bij te voegen zonder de hele sheet, waar nogal wat aan vast hangt, bij te voegen.
Ik had verwacht simpel zelf de cellen te kunnen wijzigen waar de macro betrekking op moet hebben maar dat viel even tegen.
Nu bijgevoegd een stukje van de sheet met de juiste cellen en de formules in de cellen. In het voorbeeld staan nu twee categoriëen, in de werkelijke sheet zijn dat er meer en loopt het tot regel 157.
Ik hoop dat je nog een keer de moeite wilt nemen er even naar te kijken.
 

Bijlagen

  • Voorbeeld pakbon.xlsx
    29,6 KB · Weergaven: 37
Verkeerd bestand geplaatst Sander?
 
Jep bij deze de goede.
 

Bijlagen

  • Voorbeeld pakbon.xlsb
    10,6 KB · Weergaven: 38
Bestudeer wat ik heb veranderd aan je werkblad.
De formules in kolom J zijn verwijderd (ze worden immers overschreven door de telling van Vba).
 

Bijlagen

  • Voorbeeld pakbon 1.xlsb
    15,4 KB · Weergaven: 42
Dankjewel Harry, nu werkt het precies zoals ik graag wil. Snap alleen weinig van de code.
 
Het blijkt niet betrouwbaar te werken, soms probleemloos, soms met een foutmelding.
Wanneer ik van de regel
sv(i, 4) = sv(i, 1) + sv(i, 2) + sv(i, 3) + sv(i, 4)
De + sv(i, 4) weghaal werkt het wel betrouwbaar. Zou het kunnen dat die foutmelding komt omdat de waarde van sv(i, 4) afhankelijk is van de rekensnelheid en daardoor problemen geeft?
Dat is immers een waarde welke bij zichzelf opgeteld moet worden.
 
Daar staat vast nog een formule in die cel, daar kan Excel niet mee rekenen.
sv(i,4)="" ipv sv(i,4)=leeg
 
Zelfs wanneer ik in de betreffende kolom handmatig 'clear content' doe werkt het nog niet.
 
Werkt niet kunnen we hier miet veel mee, laat het zien aan de hand van je bestand.
 
Dankzij je hint ben ik erachter dat het wel werkt wanneer er nullen in de betreffende kolom staan.
Alleen wil ik die nullen weghalen omdat ik van deze lijst een pakbon genereer.
Nu eerst maar eens slapen, morgen weer verder.
Dankjewel weer en weltrusten. :thumb:
 
Je maakt me wel nieuwsgierig met die nullen.
Ik zie het wel; ook welterusten.
 
Zou dit niet voldoende zijn ?

Code:
Sub M_snb()
    [J2:J200] = [if(j2:J200="","",G2:G200+H2:H200+I2:I200)]
End Sub
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan