Avatar billede maximus1001 Nybegynder
18. november 2009 - 10:45 Der er 10 kommentarer og
1 løsning

Excelproblemer med automatisk optælling

Hej, jeg har et problem med excel. Jeg står i den situation, at jeg har udført en stor databasen, hvor jeg skal finde antallet af et bestemt tal, og dette vil jeg have excel til at gøre automatisk for mig. Jeg tror at et konkret eksempel vil gøre det nemmere at forstå:

eks.

    A    B        C    D
1  1    1, 2
2  1    1, 2, 3
3  0    1
4  0    1
5  1    0


Hvert tal er forud defineret som en bestemt tilstand som fx et-tallet i kolonne B er ondt i knæ, to-tallet ondt i maven osv. (men dette er blot en definition jeg har givet ved siden af og ikke decideret i excel)

Foreløbigt har jeg har brugt =tæl.hviser funktionen til det og det går rigtigt fint sålænge der kun er ét tal i cellen, som fx i kolonne A, men hvis jeg vil have den til at tælle hvor hyppigt fx ettallet forekommer i kolonne b ved =tæl.hviser(B1:B5;">=1") får jeg 2, og det passer jo ikke fordi der er egentlig 4 celler med ettaller. Desuden kan jeg slet ikke få den til tælle 2 og 3 taller i kolonne B, selvom slutningen på formlen er "=2" eller ">=2".

Hjælp, jeg er gået helt i stå.

På forhånd tak...
Avatar billede Slettet bruger
18. november 2009 - 11:14 #1
For eksempel:
=SUMPRODUKT(--(B1:B5=1))
for at tælle hvor mange der er lig med 1.

Hans
Avatar billede vejmand Juniormester
18. november 2009 - 11:21 #2
Det tror jeg ikke du kan via en formel. B1 og B2 opfattes jo som tekst, mens de celler med kun ét tal opfattes som tal.
Måske via VBA, men det ved jeg ikke så meget om.
Avatar billede maximus1001 Nybegynder
18. november 2009 - 11:34 #3
Svar til dkhanknu,
jeg har lige prøvet det, men kan simpelthen ikke få excel til at godtage formlen, så det har desværre ikke rigtigt hjulpet - endnu.

Svar til vejmand og andre interesserede,
ved du om jeg evt. bruge et tegn eller lign. i cellen (fx celle B2), således at at excel ville kunne tro at det ikke er tekst, men seperate tal og dermed bruge tæl.hviser funktionen? Kan det lade sig gøre hvis jeg bruger bogstaver i stedet?


Er der en der kan hjælpe mig med VBA delen? Jeg har nemlig ikke særlig meget styr på det.
Avatar billede tjacob Juniormester
18. november 2009 - 11:34 #4
Du kan ikke lave automatisk optælling med mere end et tal i hver celle. Så du har to muligheder:

1) Lav kolonne B om til flere kolonner, så der kun er et tal i hver celle.

2) Lav tællefelterne som en brugerdefineret funktion i VBA, der kan opsplitte de enkelte celler til flere tal.
Avatar billede maximus1001 Nybegynder
18. november 2009 - 11:45 #5
svar tjacob,
der kommer jeg til kort, fordi jeg har ikke brugt vba førhen, og mit visuel studio kan ikke starte op, ved egentlig heller ikke om det er det samme.
Svar mulighed 1 har jeg også selv haft overvejet, men tror bare at det vil være nemmere at kun have det hele i et felt, hvis en vil hjælpe med vba-funktionen.

Jeg vil nemlig helst gerne have det hele i samme celle, fordi jeg skal sidenhen kunne gå tilbage og spore hvilken person der har ondt hvor, og som bekendt kan vi godt have ondt flere steder samtidig.
Avatar billede Slettet bruger
18. november 2009 - 11:47 #6
Undskyld - jeg læste ikke dit spørgsmål ordentligt. Her et nyt forsøg:
=SUM((MIDT(B1:B5;KOLONNE(1:1);1)="1")*1)
Det er en matriksformel, så du skal holde Ctrl og Shift nede før du trykker på Enter. (Herved vil formlen blive omsluttet af tuborgparenteser).
Avatar billede vejmand Juniormester
18. november 2009 - 11:52 #7
Flot dkhanknu, så kunne det altså lade sig gøre alligevel.  :-)
Avatar billede tjacob Juniormester
18. november 2009 - 12:01 #8
Her er en VBA-funktion du kan bruge.

1) Tryk Alt+F11 for at åbne Visual Basic
2) I ruden til venstre højreklikkes på ThisWorkbook og vælg Insert>Module
3) I den store rude til højre (i Module1) indsættes denne funktion:

Public Function TælTal(ByVal StartCelle As Range, ByVal SlutCelle As Range, ByVal lTal As Long) As Long

    Dim pRange As Range, pCell As Range
    Dim i As Long, lCount As Long, sCelleTal() As String
    Set pRange = Range(StartCelle, SlutCelle)
    For Each pCell In pRange.Cells
        sCelleTal = Split(pCell.Value, ",", , vbTextCompare)
        For i = 0 To UBound(sCelleTal)
            If sCelleTal(i) = lTal Then lCount = lCount + 1
        Next i
    Next pCell
    TælTal = lCount

End Function


I dit regneark kan du nu bruge funktionen hvorsomhelst:
I en celle skriver du f.eks.: =TælTal(B1;B5;1)

Den vil nu tælle 1-taller i cellerne B1 til B5

Du kan ændre alle parametre f.eks.: =TælTal(A1;C5;3)
-tæller 3 taller i cellerne A1 til C5
Avatar billede maximus1001 Nybegynder
18. november 2009 - 12:57 #9
Så er problembarnet klar igen med nogle spørgsmål.

svar tjacob,
Tak for din vba-funktion som virker glimrende sålænge det er præcis et tal jeg ønsker talt, men i mit tilfælde er der lige et lille problem. Hvad nu hvis jeg tager skemaet fra mit initiale spørgsmål og ønsker celler hvor tal >=1, >1 eller i et interval talt? Det kan din ellers glimrende VBA-funktion desværre ikke, ligesom tæl.hviser funktionen heller ikke kan.

svar dkhanknu,
Den glimrende formel har desværre den lille svaghed hvis jeg, som i mit prøveudtag af databsen har forsøgt med din formel, ønsker at se hvor mange af dem i databaseområde a2 til a56 har fået foretaget indgreb beskrevet ved tal fra 1 til 8, og skriver >="1" tæller den alle tal i alle cellerne og summerer, hvor mange tegn der egentligt er. Hvad nu hvis jeg bare ønsker at få oplyst hvor mange af de celler i a2 til a56 har tal der >=1, således at det bliver antallet celler og ikke antallet af tegn til sidst. Tæl.hviser funktionen tæller nemlig ikke celler med flere tegn med og din tæller alle tegn i alle celler med.


på forhånd tak
Avatar billede tjacob Juniormester
18. november 2009 - 13:13 #10
Du kan kopiere og modificere funktionen til også at søge på >= og intervaller. Der er dog lige det problem, at der så skal laves talformater.

Du kan kopiere funktionen og give den et nyt navn:
Skriv noget andet (f.eks. TælTalStørreEnd) de to steder der står TælTal.

Hvis du vil tælle større end:

If sCelleTal(i) = lTal Then lCount = lCount + 1

ændres til:

If Clng(sCelleTal(i)) > lTal Then lCount = lCount + 1

eller >= eller <= eller <


Hvis du vil tælle intervaller skal der en parameter mere med:

Public Function TælTalInterval(ByVal StartCelle As Range, ByVal SlutCelle As Range, ByVal lTal1 As Long,Byval lTal2 as Long) As Long

    Dim pRange As Range, pCell As Range
    Dim i As Long, lCount As Long, sCelleTal() As String
    Set pRange = Range(StartCelle, SlutCelle)
    For Each pCell In pRange.Cells
        sCelleTal = Split(pCell.Value, ",", , vbTextCompare)
        For i = 0 To UBound(sCelleTal)
            If Clng(sCelleTal(i)) >= lTal1 And  Clng(sCelleTal(i)) <= lTal2 Then lCount = lCount + 1
        Next i
    Next pCell
    TælTalInterval = lCount

End Function
Avatar billede maximus1001 Nybegynder
18. november 2009 - 14:15 #11
tak tjacob... Nu kan for alvor komme i gang med optællingen.
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