Avatar billede midk Nybegynder
12. juli 2006 - 12:31 Der er 21 kommentarer

Tæl ord i celle

Hej,

Findes der en smart måde at tælle, hvor mange gange et bestemt ord optræder i en tekststreng i en celle?

Eks:
A1: i
A2: Jeg kan ikke finde ud af at tælle ord i tekststrenge i en celle.

Hvorden tæller man ordet fra A1 (i) i teksten i A2. Altså en formel der i dette tilfælde retunerer: 2.

På forhånd tak!
Avatar billede Slettet bruger
12. juli 2006 - 13:25 #1
Jeg kan lige umiddelbart komme med 2 løsninger..

den ene er ved brug af excels worksheetfunktioner. i dette eksempel søges der for op til 3 matches.. du kan bare addere flere linjer hvis det er nødvendigt. Ulempe: fylder meget i arket + man skal manuelt addere flere linjer, hvis man f.eks. søger efter 4 matches i stedet for de 3 der angivet her, Fordel: Kræver ikke at makroer er aktiveret ved opstart.

A3: =COUNT(B1:B3)
B1: =SEARCH(A$1;A$2)
B2: =SEARCH(A$1;A$2;B1 + 1)
B3: =SEARCH(A$1;A$2;B2 + 1)


Den anden (og i mine øjne bedre) løsning er en visual basic funktion (der ikke har nogen umiddelbare begrænsninger for antal matches): Fordele og ulemper er det modsatte af den anden løsnings fordele og ulemper: Denne løsning fylder ikke i arket, men der skal accepterers makroer ved opstart.

Function find_matches(ByRef string_1 As String, ByRef string_2 As String) As Integer
    Dim start, count As Integer
    start = 1
    Do While InStr(start, string_1, string_2)
        start = InStr(start, string_1, string_2) + 1
        count = count + 1
    Loop
    find_matches = count
End Function

i A3: =find_matches(A2:A1)

Bare spørg hvis du skal have hjælp til at implementere en af løsningerne i dit ark.

Det er muligt der er en worksheetfunktion, der kan det samme, men den har jeg ikke kunnet finde.

/1.
Avatar billede mrjh Novice
12. juli 2006 - 13:26 #2
Det kan klares med en makro. Jeg tror ikke der findes en regnearksfunktion til det.

Stil dig i dit søgeord umiddelbart i cellen til højre for den tekststreng du søger i og kør makroen

Sub tælord()
ord = ActiveCell.Offset(, -1).Value
søgeord = ActiveCell.Value
mellem = Replace(ord, søgeord, ",")
y = 0
    For x = 1 To 100
    If Mid(mellem, x, 1) = "," Then
    y = y + 1
    End If
    Next x
ActiveCell.Value = y
End Sub
Avatar billede bak Forsker
12. juli 2006 - 13:31 #3
=LÆNGDE(A2)-LÆNGDE(UDSKIFT(A2;" " & A1 & " ";"  "&GENTAG(" "; LÆNGDE(A1)-1)))
Avatar billede tida Juniormester
12. juli 2006 - 13:36 #4
flot formel - hvis der står "i" i første position syntes jeg ikke den kommer med, kan det passe ?
Avatar billede Slettet bruger
12. juli 2006 - 13:41 #5
Hvilken løsning mener du?

/1.
Avatar billede bak Forsker
12. juli 2006 - 13:45 #6
Det gør der ikke, fordi jeg fik lavet den lidt hurtig.
Den søger kun på ordet hvis det er omgivet af " " på begge sider.
dvs. start og slut funker ikke (endnu)
Avatar billede mrjh Novice
12. juli 2006 - 13:50 #7
=(LÆNGDE(A2)-LÆNGDE(UDSKIFT(A2;A1;"")))/LÆNGDE(A1)
Avatar billede tida Juniormester
12. juli 2006 - 13:51 #8
jeg mente bak's formel. Jeg leger lige testperson da jeg selv kunne bruge nævnte formel. Jeg syntes dog stadig ikke den tæller helt som den skal hos mig, hvis jeg prøver at fylde flere "i"er på inde i midten.
Avatar billede tida Juniormester
12. juli 2006 - 13:52 #9
yes mrjh - den fungerer flot.
Avatar billede bak Forsker
12. juli 2006 - 13:55 #10
=SUM((LÆNGDE(" "& A2 &" ")-LÆNGDE(UDSKIFT(" "& A2 &" ";" "& A1 &" ";"")))/(LÆNGDE(A1)+2))

indtastet som arrayformel (afslut indtastning med ctrl-shift-enter istedet for bare enter, således at formlen automatisk får tuborgklammer omkring {})
Avatar billede bak Forsker
12. juli 2006 - 13:57 #11
mrjh-> som jeg kan se tæller din formel alle forekomster af i og ikke kune som helt ord.
Avatar billede bak Forsker
12. juli 2006 - 14:04 #12
Min formel behøver alligevel ikke indtastes som arrayformel, den er bare helt almindelig... jeg er vist blevet lidt rusten :-)
Avatar billede mrjh Novice
12. juli 2006 - 14:17 #13
Fuldstændig korrekt bak. Du har ret (som altid) :-)
Avatar billede midk Nybegynder
12. juli 2006 - 14:42 #14
Tak for jeres svar allesammen. Virkeligt imponerende. Jeg hælder mest til Bak's løsning, men kvadratrodenaf1's løsning med en VB funktion er dog også brugbar, jeg foretrække dog formler.

Men jeg har lige en twist: Jeg giver mine points til den bedste løsning, hvor der ikke skelnes mellem store og små bogstaver!

Tak!
midk
Avatar billede bak Forsker
12. juli 2006 - 15:11 #15
=SUM((LÆNGDE(" " & A2 & " ") - LÆNGDE(UDSKIFT(" " & SMÅ.BOGSTAVER(A2) & " "; " "& SMÅ.BOGSTAVER(A1) & " ";"")))/(LÆNGDE(A1)+2))
Avatar billede mrjh Novice
12. juli 2006 - 15:16 #16
Øv nåede det ikke :-(
Formlen har dog en lille hage. Hvis ordet du søger efter står lige efter hindanden bliver resultatet forkert. Har prøvet at løse det, men det er endnu ikke lykkedes.
Avatar billede bak Forsker
12. juli 2006 - 15:23 #17
Rigtigt mrjh. godt set.
Avatar billede mrjh Novice
12. juli 2006 - 16:58 #18
Prøv lige denne. Virker også ved ord lige efter hindanden (ihvertfald i mine tests)

=(LÆNGDE(A2)*2-LÆNGDE(UDSKIFT(A2;" "&A1;""))-LÆNGDE(UDSKIFT(A2;A1&" ";"")))/(LÆNGDE($A$1)+1)-(LÆNGDE(A2)-LÆNGDE(UDSKIFT(A2;A1;"")))/LÆNGDE(A1)
Avatar billede mrjh Novice
12. juli 2006 - 16:59 #19
Skal så selvfølgelig indlejres med funktionen små.bogstaver
Avatar billede janvogt Praktikant
13. juli 2006 - 08:50 #20
Denne kan også bruges:
=LÆNGDE(UDSKIFT(FJERN.OVERFLØDIGE.BLANKE(A1);TEGN(32);TEGN(32)&TEGN(32)) )-LÆNGDE(FJERN.OVERFLØDIGE.BLANKE(A1))+1
Avatar billede janvogt Praktikant
13. juli 2006 - 08:52 #21
Undskyld, jeg fik vist ikke læst det hele rigtigt.
Min formel tæller antal ord i en celle (A1). Det var ikke det der blev spurgt om ....
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
Stort udvalg af Excel kurser til alle niveauer og jobfunktioner

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





White paper
Tidsbegrænset kampagne: Overvejer du at udskifte eller tilføje printere i din forretning? Vi kan tilbyde én eller flere maskiner gratis