[easy_youtube_gallery id=uMK0prafzw0,8Uee_mcxvrw,HcXNPI-IPPM,JvMXVHVr72A,AIXUgtNC4Kc,K8nrF5aXPlQ,cegdR0GiJl4,L-wpS49KN00,KbW9JqM7vho ar=16_9 cols=3 thumbnail=hqdefault controls=0 playsinline=1 privacy=1 title=top wall=1 class=mySuperClass]
Först publicerad: 2009-05-18

Summera variabla cellområden i VBA

Att summera ett cellområde i Excel är enkelt. Att summera ett liknande område uttryck som en variabel i VBA är lite svårare – men det är turligt nog fortfarande enkelt. Om du stött på detta problemet (och kanske kommit till denna sidan) så vet i alla fall du vad svårigheten består i…

När man programmerar i VBA så vet man inte alltid på förhand vilka celler som skall summeras vid ett visst tillfälle. I dessa fall så måste man ta till en variabel för att uttrycka cellområdet.

I Excels kalkylblad är det enkelt att summera ett cellområde. Men VBA har ingen motsvarande funktion. Lösningen blir då att tvinga VBA att använda Excels kalkylbladsfunktioner.

Att använda Excelfunktioner i VBA

Låt oss säga att vi har ett område varOmrade som vi vill summera. För att utföra denna summering så tar vi till Excels funktion SUM.

Application.WorksheetFunction.Sum(varOmrade)

Genom ovanstående formulering kan vi från VBA påkalla vilken av Excels kalkylbladsfunktioner som helst, så länge som vi inleder med de magiska orden

Application.WorksheetFunction...

Ett exempel på summering i VBA av variabelt cellområde

vba-variabel-summering

I det här exemplet så är vi intresserade av att summera värdena som motsvaras av “A”, dvs cellområdet C3:C8.

Lösning No. 1: Skriva ut summan direkt i en cell

'cellområde som skall summeras
varSumma = Range(Cells(3,3), Cells(8, 3))
 
'summerar cellområdet och skriver ut summan i cell A1
Cells(1, 1) = Application.WorksheetFunction.Sum(varSumma)

Lösning No. 2: Skriva summan till en VBA-variabel

Denna lösning medger på ett vis en större flexibilitet då summan (lagrad i variabeln strSumma) på ett enkelt sätt kan användas direkt för vidare beräkningar.

'cellområde som skall summeras
varSumma = Range(Cells(3,3), Cells(8, 3))
 
'summerar cellområdet och sätter in summan i en variabel
strSumma = Application.WorksheetFunction.Sum(varSumma)