Avatar billede mikec Nybegynder
20. november 2007 - 15:44 Der er 11 kommentarer og
1 løsning

Hurtigere alternativ til Sumprodukt

Hej,

Jeg anvender nedenstående formel i et regneark på ca. 40.000 linier. Beregningen fungerede fint, da regnearket kun var på 5.000 linier, men nu går det meget langsomt (beregningen kan faktisk ikke gennemføres). Kan der anvendes en anden og hurtigere formel?

Nuværende formel: =SUMPRODUKT(($B$1:$B$40000=B2)*($E$1:$E$40000=E2)*($J$1:$J$40000>0))

Mvh.
MikeC
Avatar billede excelent Ekspert
20. november 2007 - 16:06 #1
Du kan da prøve denne kode, men i mit testark er den ikke hurtigere
Det aktuelle ark skal være aktiv

Sub nySum()
For t = 1 To 40000
If Cells(t, "B") = Cells(2, "B") And Cells(t, "E") = Cells(2, "E") And Cells(t, "J") > 0 Then x = x + 1
Next
MsgBox ("") & x
End Sub
Avatar billede excelent Ekspert
20. november 2007 - 16:12 #2
eller måske en af disse :

{=SUM((B1:B40000=B2)*(E1:E40000=E2)*(J1:J40000>0))}

=(TÆL.HVIS(B1:B40000;B2)+TÆL.HVIS(E1:E40000;E2)+TÆL.HVIS(J1:J40000;">0"))/3
Avatar billede mikec Nybegynder
20. november 2007 - 16:51 #3
Tak for svar. De to sidste formler giver ikke det ønskede resultat. Jeg kan benytte koden i visual basic. Men hvordan returnerer den resultatet i den ønskede celle?

Hensigten med formlen er, at beregne antal ugentlige besøg.
Hvert besøg genererer to linier, pga. vores systemopsætning.
Linie 1 indeholder kolonne B, E og J data. Linie 2 indeholder kun kolonne B og E data. Jeg kunne derfor blot slette alt linie 2 data. Men for at forhindre fejlsletninger af andre brugere, vil jeg gerne undgå dette.

- Kolonne B indeholder ugenummer.
- Kolonne E indeholder en kundekode.
- Kolonne J indeholder tidsforbrug pr. besøg.

Det er ønsket, at tælle ugentligt antal besøg pr. kundekode. Da der er to linier pr. besøg, vil det medføre at der tælles dobbelt. Dette er grunden til J1:J40000>0.

Jeg håber dette giver indtryk af, hvad jeg gerne vil opnå. Findes der ikke HVIS formler hvor flere kriterier kan inkluderes i beregningen?

Mvh.
MikeC
Avatar billede excelent Ekspert
20. november 2007 - 17:24 #4
I stedet for : MsgBox ("") & x
kan du bruge : range("A1")=x ret A1 til ønsket celle
--------------------
Har du også kundekode i linie 2 ?
Avatar billede excelent Ekspert
20. november 2007 - 18:17 #5
du kan halvere tiden med :

For t = 1 To 40000 Step 2
Avatar billede mikec Nybegynder
28. november 2007 - 11:24 #6
Hej,

Jeg har kundekode i alle 40000 linier, og ønsker antal kundebesøg i kolonne R på hver eneste linie. Jeg kan ikke få ovenstående til at give dette.

Mvh.
MikeC
Avatar billede excelent Ekspert
30. november 2007 - 16:48 #7
Din formel indikerer at du summerer et kunde/uge af gangen
mener du så en akkumuleret sum ud for denne kunde
eller skal denne kundes timer skrives ud for alle andre kunder også ?
Avatar billede mikec Nybegynder
03. december 2007 - 08:57 #8
Hej,

Jeg fik løst mit problem i weekenden ved hjælp af nogle hjælpekolonner og pivottabel.

Men tak for input.

Mvh.
Mikec
Avatar billede excelent Ekspert
30. december 2007 - 14:25 #9
så luk spørgsmål
Avatar billede mikec Nybegynder
02. januar 2008 - 09:23 #10
OK - Hvordan lukker man et ubesvaret spørgsmål
Avatar billede excelent Ekspert
02. januar 2008 - 09:41 #11
Indsætte løsning her, marker svar ude til venstre og send.
Derefter kan du markere box med dit navn og klikke accepter
Avatar billede mikec Nybegynder
02. januar 2008 - 11:06 #12
OK - Ved brug af hjælpekolonner kunne mindre ressourcekrævende formler benyttes.
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