midk
(12.755 point. Point ude: 60)
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!
Skrevet ons. d. 12. juli 2006 kl. 13:25:03| #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.
Skrevet ons. d. 12. juli 2006 kl. 13:26:56| #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
Skrevet ons. d. 12. juli 2006 kl. 13:31:49| #3
=LÆNGDE(A2)-LÆNGDE(UDSKIFT(A2;" " & A1 & " ";" "&GENTAG(" "; LÆNGDE(A1)-1)))
Skrevet ons. d. 12. juli 2006 kl. 13:36:10| #4
flot formel - hvis der står "i" i første position syntes jeg ikke den kommer med, kan det passe ?
Skrevet ons. d. 12. juli 2006 kl. 13:41:32| #5
Hvilken løsning mener du?
/1.
Skrevet ons. d. 12. juli 2006 kl. 13:45:10| #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)
Skrevet ons. d. 12. juli 2006 kl. 13:50:16| #7
=(LÆNGDE(A2)-LÆNGDE(UDSKIFT(A2;A1;"")))/LÆNGDE(A1)
Skrevet ons. d. 12. juli 2006 kl. 13:51:00| #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.
Skrevet ons. d. 12. juli 2006 kl. 13:52:22| #9
yes mrjh - den fungerer flot.
Skrevet ons. d. 12. juli 2006 kl. 13:55:53| #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 {})
Skrevet ons. d. 12. juli 2006 kl. 13:57:51| #11
mrjh-> som jeg kan se tæller din formel alle forekomster af i og ikke kune som helt ord.
Skrevet ons. d. 12. juli 2006 kl. 14:04:56| #12
Min formel behøver alligevel ikke indtastes som arrayformel, den er bare helt almindelig... jeg er vist blevet lidt rusten :-)
Skrevet ons. d. 12. juli 2006 kl. 14:17:09| #13
Fuldstændig korrekt bak. Du har ret (som altid) :-)
Skrevet ons. d. 12. juli 2006 kl. 14:42:44| #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
Skrevet ons. d. 12. juli 2006 kl. 15:11:47| #15
=SUM((LÆNGDE(" " & A2 & " ") - LÆNGDE(UDSKIFT(" " & SMÅ.BOGSTAVER(A2) & " "; " "& SMÅ.BOGSTAVER(A1) & " ";"")))/(LÆNGDE(A1)+2))
Skrevet ons. d. 12. juli 2006 kl. 15:16:29| #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.
Skrevet ons. d. 12. juli 2006 kl. 15:23:58| #17
Skrevet ons. d. 12. juli 2006 kl. 16:58:36| #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)
Skrevet ons. d. 12. juli 2006 kl. 16:59:41| #19
Skal så selvfølgelig indlejres med funktionen små.bogstaver
Skrevet tor. d. 13. juli 2006 kl. 08:50:13| #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
Skrevet tor. d. 13. juli 2006 kl. 08:52:51| #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 ....