Avatar billede Asger Carlsen Nybegynder
29. november 2011 - 13:42 Der er 9 kommentarer og
1 løsning

Udvidelse af SUM() i macro til brug i EXCEL

Jeg er ved at lave en macro der indsætter en ny rækker, med nogle forskellige celler med diverse udregninger.

Øverst har jeg så et felt der summer over samtlige rækker.

Problemer er så at når jeg kører min makro, kommer den nye linie ikke med i summen.

Fx summer jeg fra 14-17: SUM(M14:M17)
Når jeg så kører min macro skal jeg have den til at udvide sumfeltet til SUM(14:18)

Nogen der ved hvordan det gøres?
Avatar billede Ialocin Novice
29. november 2011 - 23:00 #1
Hej coder_carl

Kan du bruge følgende ....


Procedure som opsummerer kolonne A fra række 14

Public Sub OpsummerKolonneA()
Dim s As String
Dim r As Integer
   
    'sæt r = sidste rækkenummer i kolonne A, indeholdende en værdi
    r = Range("A65536").End(xlUp).Row
       
    'sæt s = formel tekststrengen
    s = "=sum(A14:A" & r & ")"
   
    'tildel celle A1 på Sheet1 formlen
    Sheet1.Range("A1").Formula = s
   
End Sub



I det aktuelle arks Change hændelse kaldes ovenstående procedure, hver gang der sker en ændring i arket.


Private Sub Worksheet_Change(ByVal Target As Range)

  'kald OpsummerKolonneA proceduren
  OpsummerKolonneA

End Sub


Med venlig hilsen, Nicolai
Avatar billede Asger Carlsen Nybegynder
01. december 2011 - 10:55 #2
Hej Nicolai,

Delvis, ligesom man starter i celle 14, kan man så lave et stop, i fx celle 18? Den skal nemlig ikke summe hele kolonnen, der kommer noget andet længere nede i arket.
Avatar billede Ialocin Novice
01. december 2011 - 22:55 #3
Hej Coder_carl

Indsætter du kun 1 ny række ??, så området der skal summeres er fra række 14 til 18 ?

Med venlig hilsen, Nicolai
Avatar billede Asger Carlsen Nybegynder
02. december 2011 - 09:30 #4
Ja, og nej. For der indsættes en linie af gangen. Så kunne godt tænke mig at at det blev lidt dynamisk. Så det ikke er bundet op på det altid starter fra en bestemt celle. Men noget i retning af SUM(Nuværende-start-celle:nuværende-slut-celle+1). Kan godt være det er et mere komplekst problem end som sådan.
Avatar billede Asger Carlsen Nybegynder
02. december 2011 - 11:25 #5
Jeg sidder selv og prøver mig lidt frem, det skal lige siges jeg er ret ny i at code VBA. Har fået lavet en kode der starter ved cellen "start" og slutter ved cellen "slut" altså: Der står Fx "start" i B1 og slut i B13. skal så ende ud i der i B1 skal stå SUM(B2:B13)

Her er koden jeg forsøger mig med, måske det kan hjælpe til at se hvad jeg vil. Har skrevet ' gættet linie ' over de linier jeg mangler en korrekt kode til.

Håber det kan hjælpe lidt

---------------------------------------------
Sub sum()

  For Each cell In ActiveSheet.Range("B:B") '


            If cell.Text = "start" Then

                ' gættet linie '
                Start = cell + 1
                                   
            End If
           
            If cell.Text = "slut" Then

            ' gættet linie '
            Slut = cell - 1

            GoTo Slut
            End If

    Next
   
Slut:

Range("B1").Select
' gættet linie '
ActiveCell.FormulaR1C1 = "SUM(Start:Slut)"
   
End Sub
Avatar billede Ialocin Novice
03. december 2011 - 22:19 #6
Hej coder_carl

Hvad med følgende procedure ...

Sub SumDynamiskOmråde()

    'tildel celle A1 den summerede værdi fra celle A14
    'og ned til førstkommende tomme celle under celle A14
    Range("A1").Value = WorksheetFunction.sum(Range(Range("A14"), Range("A14").End(xlDown)))
       
End Sub


Med venlig hilsen, Nicolai
Avatar billede Asger Carlsen Nybegynder
04. december 2011 - 15:33 #7
Hej Nicolai,

Det er noget i den stil ja!. Kan man gøre så den i A1 laver en formel, frem for et tal? Værdierne den summer op, bliver nemlig ændret løbende.
Avatar billede Ialocin Novice
04. december 2011 - 17:03 #8
Hej coder_carl

Så prøv lige om ikke denne her fungerer efter hensigten ... ?


Sub SumFormelDynamiskOmråde()
Dim r As Integer
Dim s As String
 
    'set r = den sidste række med data efter række 14 i kolonne A
    r = Range("A14").End(xlDown).Row
       
       
    'sæt s = formel tekststrengen
    s = "=sum(A14:A" & r & ")"
       
       
    'tildel celle A1 på Sheet1 formlen
    Sheet1.Range("A1").Formula = s

       
End Sub



Jeg kalder proceduren i mit arks Change hændelse:

Private Sub Worksheet_Change(ByVal Target As Range)

  SumFormelDynamiskOmråde

End Sub


Med venlig hilsen, Nicolai
Avatar billede Asger Carlsen Nybegynder
05. december 2011 - 21:24 #9
Hej Nikolai,

Det virker lige efter hensigten! Må din tilgang var noget smartere end min egen.

Du skal have et stort tak for hjælpen.

Smid et svar
Avatar billede Ialocin Novice
05. december 2011 - 22:42 #10
Hej coder_carl

Godt at høre :o)
Hermed mit svar.

Med venlig hilsen, Nicolai
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
Kurser inden for grundlæggende programmering

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