Avatar billede tvc Seniormester
12. november 2011 - 20:02 Der er 1 kommentar og
1 løsning

Sum timer for identiske kundenr.

Hej

Jeg har et ark med en mængde timer fordelt på kundenumre. Nogle af kundenumrene har også en afdeling på - angivet med et bogstav.

Jeg ønsker en sum af timer pr. kunde (sum af alle kundens afdelinger). Kundenummeret er de første fire cifre, afdelingsnummeret er det der står mellem de fire første cifre og "-", tallet efter "-" er årstallet.

Jeg søger en VBA, der i kolonne 3 (Kundenummer og medarbejdere står i kolonne 1 og kundenavn og timer står i kolonne 2) ud for kundens sidste afdelingssum indsætter summen af kundens afdelinger.

Så det skal være noget i stil med en For der løber alle kundenumre igennem, hvis kundenummer er lig med det forrige skal disse summeres, og hvis det efterfølgende også er det samme skal dette lægges til o.s.v. Når den sidste afdeling på kundenummeret er lagt til skal summen skrives i kolonne 3 ud for den sidste afdelings sum.

Er der en der kan hjælpe (har selv siddet længe og forsøgt men det er ikke lige til)?

Data ser således ud - blot med 2000 rækker:

4100-11            ABC
Medarbejder    Antal timer
A        1,5
        1,5
   
   
4101-11        BCD1
Medarbejder    Antal timer
A        1,15
        1,15
   
   
4101a-11    BCD2
Medarbejder    Antal timer
A        1,5
B        4,25
        5,75
   
   
4101b-11    BCD3
Medarbejder    Antal timer
A        1,05
        1,05
   
   
4101c-11    BCD4
Medarbejder    Antal timer
B        0,95
        0,95
   
   
4101d-11    BCD5
Medarbejder    Antal timer
D        0,95
        0,95
   
   
4101e-11    BCD6
Medarbejder    Antal timer
D        0,95
        0,95
   
   
4101f-11    BCD7
Medarbejder    Antal timer
R        0,9
        0,9
   
   
4102-11    CDE
Medarbejder    Antal timer
G        1,5
R        1
        2,5
   
   
4102a-11    CDE1
Medarbejder    Antal timer
E        0,3
G        3,5
        3,8
   
   
4102b-11    CDE2
Medarbejder    Antal timer
D        4,8
E        1
        5,8
   
   
4102c-11    CDE3
Medarbejder    Antal timer
R        6,5
E        0,5
        7
   
   
4102d-11    CDE4
Medarbejder    Antal timer
R        1,8
F        0,5
        2,3
   
   
4102e-11    CDE4
Medarbejder    Antal timer
G        0,3
D        2,5
        2,8
   
   
4102f-11    CDE5
Medarbejder    Antal timer
D        0,3
E        2,5
        2,8
   
   
4103-11        DEF1
Medarbejder    Antal timer
R        1
E        0,2
F        6,7
G        0,15
        8,05
   
   
4103a-11    DEF2
Medarbejder    Antal timer
E        0,2
F        4,9
R        0,15
        5,25
   
   
4103d-11    DEF3
Medarbejder    Antal timer
E        2,95
F        0,15
        3,1
   
   
4103e-11    DEF4
Medarbejder    Antal timer
S        0,2
E        5,8
F        0,15
        6,15
   
   
4103f-11    DEF5
Medarbejder    Antal timer
E        0,2
D        1,4
S        4,5
        6,1
   
   
4103g-11    DEF6
Medarbejder    Antal timer
S        0,2
D        4,9
E        0,15
        5,25
   
   
4103h-11    DEF7
Medarbejder    Antal timer
F        0,2
R        4,85
D        0,15
        5,2
   
   
4103i-11    DEF8
Medarbejder    Antal timer
S        0,2
D        1,15
E        4,5
        5,85
   
   
4104-11        EFG1
Medarbejder    Antal timer
E        3,35
F        0,15
        3,5
   
   
4104a-11    EFG2
Medarbejder    Antal timer
S        3,1
E        0,15
        3,25
Avatar billede tvc Seniormester
14. november 2011 - 09:26 #1
Tak supertekst - det virker perfekt.

Lægger du et svar?

Løsningen blev:

Dim sidsteRæk As Long, ræk As Long, værdi, stregPos As Byte, slutRæk As Long
Dim afdSum As Double, kundeSum As Double, kundenr As String, brud As String
Dim totalRæk As Long
Sub test4()
    sidsteRæk = ActiveCell.SpecialCells(xlLastCell).Row
    brud = ""
   
    For ræk = 1 To sidsteRæk
        If ræk > sidsteRæk Then
            Exit For
        End If
       
        kundenr = Left(Range("A" & ræk), 4)
        If brud = "" Then
            brud = kundenr
            brudErkendt
        Else
            If kundenr <> brud Then
                Range("D" & totalRæk) = kundeSum        '<-- ret D -> C
                kundeSum = 0
                afdSum = 0
                brud = kundenr
               
                brudErkendt
            Else
                brudErkendt
            End If
        End If
    Next ræk
   
Rem Sidste kunde
    Range("D" & totalRæk) = kundeSum

    Application.ScreenUpdating = False
End Sub
Private Function findAfdSum(ræk As Long)
Dim r As Long
    For r = ræk To sidsteRæk
        If Range("A" & r) = "" And IsNumeric(Range("B" & r)) = True Then
            findAfdSum = r
            Exit Function
        End If
    Next r
    MsgBox "Afdtotal ikke fundet - afdStart række: " & CStr(ræk)
   
    Stop
End Function
Private Sub brudErkendt()
    totalRæk = findAfdSum(ræk)
    afdSum = Range("B" & totalRæk)
    kundeSum = kundeSum + afdSum
    ræk = totalRæk + 2
End Sub
Avatar billede supertekst Ekspert
14. november 2011 - 09:45 #2
Selv tak - et svar..
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