I kolonne E har jeg gruppenumre. Det kan f.eks. være 900, 60, 70 osv. Det samme gruppenummer kan sagtens optræde flere gange. Udtrækket opdaterer sig selv hver time og derfor bliver udtrækket større og større.
I kolonne D har jeg kr. Den følger grupperne, så der kan stå i D: 300 og så i E: 900 og sådan fortsætter det så ned af. Denne opdaterer også og bliver større og større i rækker.
Så kommer spørgsmålet. Jeg vil gerne lave en diagram som viser hver gruppe og hvor mange kroner der er til det.
Så: Funktionen skal tage alle rækker og lægge tallene sammen hvor gruppenummer er identisk. Denne har jeg så brug for at der så laver to kolonner:
Eks. Kr Gruppenummer 2135 900 25 60 785 70
osv. Det er vigtigt at bygge kolonner er dynamiske, så hvis der kommer nye grupper til at den selv "putter" dem på listen.
Hos Computerworld it-jobbank er vi stolte af at fortsætte det gode partnerskab med folkene bag IT-DAY – efter vores mening Danmarks bedste karrieremesse for unge og erfarne it-kandidater.
Hermed min VBA procedure, som fungerer i Excel 2003. Der opsummeres på kolonne E (gruppenummer) Opsummeringen skrives til kolonne A og B pr. gruppenummer
----------------- Sub SumOp() Dim wb As Workbook Dim ws As Worksheet Dim eSidsteRække As Integer Dim aSidsteRække As Integer Dim aCell As Range Dim eCell As Range Dim sum As Double Dim t As Boolean Dim g As Integer
Application.ScreenUpdating = False
'** klargør objekter og variabler **
'sæt wb = denne workbook Set wb = ThisWorkbook
'sæt ws = arket med navnet "Sheet1" Set ws = wb.Worksheets("Sheet1")
'sidste række i kolonne E eSidsteRække = ws.Range("E65536").End(xlUp).Row
'sidste række i kolonne A aSidsteRække = ws.Range("A65536").End(xlUp).Row
'tøm det opsummerede område i kolonne A og B, så der ikke overskrives ved opdatering! ws.Range("A1:B" & aSidsteRække).Clear
'** Gennemløb af kolonne E og A
'løb ned gennem hver celle i kolonne E For Each eCell In ws.Range("E1:E" & eSidsteRække)
'tøm sum sum = 0
'sæt sum = værdien til venstre for den aktive celle i kolonne E sum = eCell.Offset(0, -1).Value
'** søg gruppenummeret i kolonne A **
'første gang der skrives et gruppenummer If ws.Range("A1").Value = "" Then
'sæt gruppenummer = værdien fra den aktive celle i kolonne E ws.Range("A1").Value = eCell.Value
'sæt gruppenummerets tilhørende værdi fra kolonne F ws.Range("A1").Offset(0, 1).Value = sum
'sæt ny sidste række i kolonne A aSidsteRække = ws.Range("A65536").End(xlUp).Row
'hvis det ikke er første gang der skrives et gruppenummer Else
'løb ned gennem hver celle i kolonne A til sidste celle med en værdi For Each aCell In ws.Range("A1:A" & aSidsteRække)
'hvis den aktive celle i kolonne A er = den aktive celle i kolonne E If aCell.Value = eCell.Value Then
'gruppenummer eksisterer allerede i kolonne A t = True
'sæt g = rækkenummeret for den aktive celle i kolonne A g = aCell.Row
End If
'næste celle i kolonne A Next aCell
'** efter gennemløb af hver celle i kolonne A **
'hvis t = true, så er gruppenummeret allerede oprettet i kolonne A If t = True Then
'opsummer eksisterende værdi for det aktuelle gruppenummer ws.Range("A" & g).Offset(0, 1).Value = ws.Range("A" & g).Offset(0, 1).Value + sum
'sæt t = False t = False
'hvis gruppenummeret IKKE allerede er oprettet i kolonne A Else
'sæt gruppenummeret i cellen under sidste celle med værdi i kolonne A ws.Range("A" & aSidsteRække + 1).Value = eCell.Value
'sæt gruppenummerets tilhørende værdi fra kolonne B ws.Range("A" & aSidsteRække + 1).Offset(0, 1).Value = ws.Range("A" & aSidsteRække + 1).Offset(0, 1).Value + sum
'ny sidste række i kolonne A aSidsteRække = ws.Range("A65536").End(xlUp).Row
End If
End If
'næste celle i kolonne E Next eCell
Application.ScreenUpdating = True
End Sub
Med venlig hilsen, Nicolai
Synes godt om
Ny brugerNybegynder
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.