Avatar billede kim1a Ekspert
21. maj 2013 - 14:23 Der er 2 kommentarer og
1 løsning

Dynamisk sum i VBA

Hejsa

Jeg trækker en statistik på månedsbasis, og hver måned kommer der to ekstra kolonner på det jeg trækker. Desværre laver den ikke en summering og en sådan ønsker jeg at få på.

Da jeg manipulerer statistikken på andre måneder via VBA tænker jeg at det ville være skønt at kunne indsætte den ligeledes via VBA.

Via linjen:
Sidstekolonnenr = ActiveCell.SpecialCells(xlLastCell).Column
Kan jeg definere hvor langt ude summen skal laves, men da dette naturligvis er dynamisk hver måned har jeg brug for en form for if sætning.

Eksempel kan findes på http://gupl.dk/696627/
Det jeg trækker har tre kolonner med diverse data (ligegyldigt hvad det er) herefter kommer Jan-April = 8 kolonner. Sum skal derfor stå i kolonne 12 og ligge kolonne 10+8+6+4 sammen.
Næste måned skal sum stå i kolonne 14 og addere 12+10+8+6+4

Jeg tænker at jeg måske kan bruge if til at definere at den skal indsætte hver anden kolonne (negativ = bagud) indtil at X(hver anden kolonne nr) minus 3 < 2.

Ender jeg med at måtte skrive formlen hver gang? Bemærk at jeg bruger relative referencer, men jeg kan naturligvis oversætte dem hvis du laver makroen med absolutte.
Avatar billede kabbak Professor
21. maj 2013 - 19:46 #1
en løsning via VBA.

Koden sættes i ThisWorkbook modulet

Når du skriver sum i en kolonne, på række 2, vil den summere hveranden kolonne, startende fra kolonne 4.

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim KL As Integer, antakRK As Long, RK As Long, Total As Double
If Target.Row = 2 Then
If UCase(Target) = "SUM" Then
KL = Target.Column
antalrk = ActiveSheet.UsedRange.Rows.Count
For RK = 3 To antalrk
Total = 0
For i = 4 To KL - 2 Step 2
Total = Total + Cells(RK, i)
Next
Cells(RK, KL) = Total
Next
End If
End If
End Sub
Avatar billede kim1a Ekspert
29. maj 2013 - 15:45 #2
jeg beklager jeg ikke har fået kigget nærmere på det. Jeg stoler dog på at jeg får det til at virke, så kom med et svar - så giver jeg point og lukker.
Avatar billede kim1a Ekspert
11. juni 2013 - 14:27 #3
Jeg kunne ikke få din sub til at virke uanset hvor jeg satte den ind.

Jeg er dog meget glad for den løsning du kom med, for jeg tog en enkelt ting med derfra:
antalrk = ActiveSheet.UsedRange.Rows.Count
Som jeg i stedet lavede til:
ActiveSheet.UsedRange.Column.Count

På den måde definerede jeg hvor min sum skulle stå, så lavede jeg en fast linje der skrev: =sum(D2,F2,H2 etc (12 måneder) og lod summen stå i en kolonne skævt (så den ikke lavede cirkulær reference).
Ikke kønt, men det virker efter hensigten.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester