Avatar billede kleindk Nybegynder
05. november 2005 - 01:27 Der er 14 kommentarer og
1 løsning

Antal forskellige i en liste

Hej
Jeg har ca. 10000 fakturatransaktioner i en liste.
Listen indeholder kundenavn, fakturanummer,beløb og måned(nummer). Listen bruges til en pivottabel.

Med DSUM finder jeg nemt hvor meget der er faktureret for i en bestemt måned, men jeg har brug for at finde hvor mange forskellige kunder der er blevet faktureret i denne måned da jeg skal kunne udregne gemmensnits omsætning per måned. Hver kunde har en eller flere fakturaer i en måned og derfor kan jeg ikke bare bruge DCOUNT.
Avatar billede kleindk Nybegynder
05. november 2005 - 10:56 #2
Det første link peger helt klart i den rigtige retning. Der er bare lige det at min sammentælling skal laves på en liste som ændrer sig hele tiden (ex. forskellige måneder, kunder eller lign.) Vil det være muligt at gøre noget tilsvarende, med DFUNKTIONER. Jeg kan ikke lige konvertere det da der ikke eksisterer en DSUMPRODUCT funktion.
Avatar billede kabbak Professor
07. november 2005 - 12:41 #3
brug en pivottabel.

du skal ikke tage fakturanummer med
Avatar billede kleindk Nybegynder
07. november 2005 - 20:30 #4
En pivottabel kan godt lave unike grupper, men den kan ikke tælle hvor mange forskellige der er. Iøvrigt er alt organiseret i en pivottabel. At fjerne fakturanumrene bare fordi de ikke er relevante for netop dette spørgsmål synes mig unødvendigt.
Avatar billede bak Forsker
07. november 2005 - 20:55 #5
Denne formel kan gøre det
=SUM(1/TÆL.HVIS(A2:A1000;A2:A1000))
Afslut indtastning med ctcl-shift -enter istedet for bare enter.
Avatar billede bak Forsker
07. november 2005 - 21:49 #6
sorry, så ikke lige at det jo netop var det der stod i flemmings liks. Den formel bliver nu nok alligel for langsom  på 10000 rækker :-)

Denne funktion er hurtigere

Function CountUniq(Omraade As Range)
Dim AllCells As Variant, cell As Variant
Dim Uniqs As New Collection
Dim strCheck As String

  Set AllCells = Omraade
  On Error Resume Next
  For Each cell In AllCells
      Uniqs.Add cell.Value, CStr(cell.Value)
  Next cell
  CountUniq = Uniqs.Count
  Set Uniqs = Nothing
  Set AllCells = Nothing
End Function
07. november 2005 - 22:08 #7
Fint BAK - jeg har jo selvfølgelig som så ofte før lavet funtionen, så jeg synes den er pæn :-)

Her er to forskellige udgaver.
-fælles for dem begge er Application.Volatile, hvilket får funktionen til at genberegne sig hvergang regnearket beregnes (vigtig lille detalje - men måske vild for meget store områder)
-den første er lavet med For Each og den sidste med en For Next - tidligere udgaver af Excel har problemer med funktioner, som indeholder For Each løkker.

Public Function CountUniqueCells(ByVal Area As Range)
    Dim rCell As Range
    Dim colUniques As New Collection
    Application.Volatile

    On Error Resume Next
    For Each rCell In Area.Cells
        colUniques.Add rCell.Value, CStr(rCell.Value)
    Next rCell
    On Error GoTo 0

    CountUniqueCells = colUniques.Count
    Set colUniques = Nothing
End Function


Public Function CountUniqueCells(ByVal Area As Range)
    Dim lRow As Long
    Dim lCol As Long
    Dim colUniques As New Collection
    Application.Volatile

    On Error Resume Next
    For lCol = 1 To Area.Columns.Count
        For lRow = 1 To Area.Rows.Count
            colUniques.Add Area.Cells(lRow, lCol).Value, CStr(Area.Cells(lRow, lCol).Value)
        Next lRow
    Next lCol
    On Error GoTo 0

    CountUniqueCells = colUniques.Count
    Set colUniques = Nothing
End Function
Avatar billede bak Forsker
07. november 2005 - 22:36 #8
Her er en lidt kortere model til pivottabeller
rgPT er en tilfældig celle i pivottabellen
vFieldName er Headeren/overskriften på det felt der ønskes talt (enten som celle eller som tekst. Tekst skal have apostroffer om

Public Function PivotCount(ByRef rgPT As Range, ByVal vFieldName As Variant) As Long
  PivotCount = rgPT.PivotTable.PivotFields(CStr(vFieldName)).PivotItems.Count
End Function

bruges
=PivotCount(A4; "Kundenavn")
eller
PivotCount(A4; A6) hvor A6 indeholder overskrifter Kundenavn
Avatar billede bak Forsker
07. november 2005 - 22:39 #9
Hej flemming, velkommen til overfladen :-)
Jeps, det er en pæn og hurtig funktion og det er netop pga. beregningstiden jeg ikke har taget volatile med.
07. november 2005 - 22:42 #10
Thanks - bliver dog ikke så ofte jeg kigger forbi - jeg har travlt med mit lille firma :-)
Avatar billede bak Forsker
07. november 2005 - 22:48 #11
okey, er du startet for dig ? sejt :-)
Skal du bruge hjælp til noget så ring/skriv ....
Avatar billede kleindk Nybegynder
08. november 2005 - 00:30 #12
Jeg kan mærke at det er et par garvede gutter jeg her har fået på opgaven. Hvad gør en mindre garvet som mig? Jeg er rimeligt habil til excel men har aldrig lært en linie VB og jeg aner ikke hvordan man aktiverer sådan en programstump.
Så spørgsmålet er: Kan det kort forklares hvordan jeg implementerer det, eller findes der en måde at få denne kode omsat i en formel?
08. november 2005 - 08:32 #13
Smiler - aktivering af en vba funktion for dummies :-)

Kopier funktionen her fra siden
Start Excel
Åben dit regneark (går det for hurtigt? *gg*)
Tryk Alt+F11 (nu starter der et helt nyt program)
I menuen vælger du "Insert->Module" (en hvid "side" åbnes)
Paste funktionen ind på denne "hvide side" (også kaldet et modul eller kodemodul)
Husk navnet på funktionen f.eks. CountUniqueCells
Luk dette "Microsoft Visual Basic" med krydset i højre hjørne.
I excel stille du dig i en celle og skriver 
=CountUniqueCells(område)
hvor område f.eks. er A1:F20 (eller netop det område du vil have talt for unique celler
Avatar billede kleindk Nybegynder
15. november 2005 - 19:28 #14
Hej igen,
Ja, undskyld mig, men dit første svar fik mig til at søge videre på andre databaser og resultatet blev som følger:

=SUM(N(FREQUENCY(IF(Transactions!$G$4:$G$2247=D13,MATCH(Transactions!$A$4:$A$2247,Transactions!$A$4:$A$2247,0)),MATCH(Transactions!$A$4:$A$2247,Transactions!$A$4:$A$2247,0))>0))

Denne formel løser mit problem uden at skulle VBAe. Hvis du sender mig et svar så skal du få pointene for din inspiration og det første skridt i retningen af at gøre mig til VBA mand. Tak for hjælpen begge to.
15. november 2005 - 20:10 #15
Jeg er blot en kodenørd
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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