Avatar billede jensen363 Forsker
14. maj 2008 - 09:16 Der er 7 kommentarer og
1 løsning

Sum fra højre mod venstre og markér celle der er tættest på 0

I et megastort regneark har jeg regnskabsdata visende ultimosaldi for en række kunder, eksempel :

Kunde  Jan  Feb  Mar  Apr  Maj    Jun    Jul    Aug
21000    1.973 8.330 5.178 936  7.146  -3.107  -1.393  -2.442

For denne kunde skal jeg fra højre mod venstre summere data, og i den celle hvor summen er tættest på nul, skal denne celle markeres, dvs. maj måned i det viste eksempel ...

Regnearket indeholder 40.000 rækker, og øvelsen skal gøres for alle rækker

How to do ?
Avatar billede supertekst Ekspert
14. maj 2008 - 10:00 #1
Hvor mange måneder er der tale om?
Avatar billede jensen363 Forsker
14. maj 2008 - 10:02 #2
Det er variabelt hen over året, p.t. er det kolonne G - P
Avatar billede supertekst Ekspert
14. maj 2008 - 10:40 #3
OK - her er i første omgang et forsøg baseret på opstillingen iflg. dit oplæg:

Dim mdSum(), antalKol, antalRæk
Private Sub opTælling()
    antalRæk = ActiveCell.SpecialCells(xlLastCell).Row
    antalKol = ActiveCell.SpecialCells(xlLastCell).Column
   
    ReDim mdSum(antalKol)
   
    For ræk = 2 To antalRæk
        akksum = 0
        nulstilMdSum
       
        For md = antalKol To 1 Step -1
            akksum = akksum + Cells(ræk, md)
            mdSum(md - 1) = akksum
        Next md
        mdindex = findMålVærdi
        Cells(ræk, mdindex).Interior.ColorIndex = 4
   
    Next ræk
   
    MsgBox ("Gennemløb afsluttet")
End Sub
Private Function findMålVærdi()
Dim laveste
    laveste = 999999
    For ix = antalKol - 1 To 1 Step -1
        værdi = Abs(mdSum(ix))
        If værdi < laveste Then
            findMålVærdi = ix + 1
            laveste = værdi
        End If
    Next ix
End Function
Private Sub nulstilMdSum()
    For f = 0 To antalKol
        mdSum(f) = 0
    Next
End Sub
Avatar billede jensen363 Forsker
14. maj 2008 - 10:50 #4
Den fejler i den første den : akksum = akksum + Cells(ræk, md)

Betyder det noget, at regnearket benytter månederne i modsat rækkefølge ?
Avatar billede jensen363 Forsker
14. maj 2008 - 11:43 #5
Hjælper det hvis jeg sender et eksempel til dig ?
Avatar billede supertekst Ekspert
14. maj 2008 - 13:25 #6
Ja tak - du er velkommen (pb@supertekst-it.dk), hvis du har glemt adressen :-)
Avatar billede supertekst Ekspert
15. maj 2008 - 10:53 #7
Rem Version 3
Rem =========
Const startKol = 7              'G
Dim mdSum(), antalKol, antalRæk
Sub opTælling()
    Application.ScreenUpdating = False
   
    antalRæk = ActiveCell.SpecialCells(xlLastCell).Row
    antalKol = tælAntalMåneder
   
    ReDim mdSum(antalKol)
   
    For ræk = 2 To antalRæk
Rem Kun hvis Kol A er udfyldt
        If Cells(ræk, 1) <> "" Then
            akksum = 0
            nulstilMdSum
       
            For md = antalKol + startKol - 1 To startKol Step -1
                If Cells(ræk, md) <> "" Then
                    akksum = akksum + Cells(ræk, md)
                    mdSum(md - startKol + 1) = akksum
                End If
            Next md
            mdindex = findMålVærdi
           
            If mdindex > 0 Then
Rem Opret kommentar med sum
                Cells(ræk, mdindex + startKol - 1).AddComment CStr(mdSum(mdindex))
   
Rem FARVE-MARKERING UDGÅR
'                Cells(ræk, mdindex + startKol - 1).Interior.ColorIndex = 4
            End If
        End If
    Next ræk
   
    Application.ScreenUpdating = True
   
    MsgBox ("Gennemløb afsluttet")
End Sub
Private Function findMålVærdi()
Dim laveste
    laveste = 999999
    For ix = antalKol To 1 Step -1
        If mdSum(ix) <> "" Then
            værdi = mdSum(ix)
Rem Kun positiv værdier
            If værdi < laveste And værdi >= 0 Then
                findMålVærdi = ix
                laveste = værdi
            End If
        End If
    Next ix
End Function
Private Sub nulstilMdSum()
    For f = 0 To antalKol
        mdSum(f) = ""
    Next
End Sub
Private Function tælAntalMåneder()
    tælAntalMåneder = 0
    For kol = 7 To 244
        If Cells(1, kol) <> "" Then
            tælAntalMåneder = tælAntalMåneder + 1
        Else
            Exit Function
        End If
    Next kol
End Function
Avatar billede jensen363 Forsker
15. maj 2008 - 11:08 #8
Forklaring til løsningen, som indeholder lidt ekstra "super"-features.

Ovenstående modulkode identificerer og markerer den celle hvori summen fra højre mod venstre er tættest på 0 ( positive værdi ) ... summen indsættes som kommentar i den aktuelle celle.

En helt igennem smart løsning
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