Avatar billede luskebuxen Nybegynder
22. april 2008 - 15:43 Der er 7 kommentarer og
1 løsning

Macro til søgning af gentagne ord i kontekst.

Hej alle eksperter.

Jeg skal summere en stor mængde tekst som er samlet sammen af en hel række kilder. I den tekst, figurerer sætninger som f.eks. "af hensyn til sortering" flere gange - simpelthen som følge af gentagelser. Hvordan finder jeg eksempler på at 4 fortløbende ord står angivet flere gange?

Bemærk at det ikke er den specifikke sætning jeg skal finde - for der ville jeg bare bruge "søg" men derimod med følgende logik;

Søg efter "Jeg skal summere en" - findes xx gange.
Søg efter "skal summere en stor" - findes xx gange.
Søg efter "summere en stor mængde" - findes xx gange.

Er vi ude i en avanceret macro?
Avatar billede Lene Fredborg Ekspert
22. april 2008 - 16:12 #1
Måske kan du bruge noget i retning af makroen nedenfor. Den åbner en inputbox, hvori du kan indtaste den streng, du vil optælle (i denne version vil små og store bogstaver spille en rolle – skriv teksten nøjagtigt - eller kopier den fra dokumentet). Ved klik på OK benyttes Find til at finde og tælle antal forekomster, og en dialogboks viser resultatet til sidst.

Sub FindAndCountWordSequence()
    Dim n As Long
    Dim oRange As Range
    Dim strInput As String
    Dim strTitle As String
   
    strTitle = "Tæl forkomster af tekststreng"
   
    Set oRange = ActiveDocument.Range

Retry:
    strInput = InputBox("Indtast den tekst, for hvilken du vil optælle forekomster:", strTitle)

    If Len(strInput) = 0 Then
        If StrPtr(strInput) = 0 Then
            'Cancel clicked
            Exit Sub
        Else
            'OK clicked, empty field
            MsgBox "Indtast en tekst. Prøv igen.", vbOKOnly, strTitle
            GoTo Retry
        End If
    Else
        'input
        n = 0
        With oRange.Find
            .Text = strInput
            Do Until .Execute = False
                n = n + 1
            Loop
        End With
    End If
   
    'Show result
    MsgBox strInput & vbTab & n & " gang(e)", vbOKOnly, strTitle
    'Clean up
    Set oRange = Nothing
End Sub
Avatar billede luskebuxen Nybegynder
23. april 2008 - 12:14 #2
Funktionen virker, men giver ikke helt den oplistning som jeg havde i tankerne.

Jeg vil gerne, at logikken specificere hvilken kontekst der findes.

- Kan den søge på f.eks. de 4 første ord i et dokument, altså ord nr. 1,2,3 & 4 (på 120 sider) og bruge disse ord som tekststrengen der optælles.
- Efterfølgende ord 2,3,4 & 5 og bruge disse ord som tekststrengen der optælles.
- osv. osv. i et kontinuerligt loop indtil hele dokumentet er gnavet igennem?

Slutteligt at have en oplistning over hits af gentagelser pr. kontekst?

Det er ikke nemt :o)
Avatar billede Lene Fredborg Ekspert
23. april 2008 - 15:08 #3
Det kan lade sig gøre – du kan bygge videre på den makro, jeg har lavet til dig.

Hvad skal du bruge det til?
Hvis en side indeholder 500 ord, så har du ca. 60.000 ord i dokumentet, og det ville betyde, at makroen skulle lave omtrent lige så mange checks – og output i sidste ende ville være noget, der fylder ca. 60.000 linjer – noget i retning af 1.000 sider…
Avatar billede luskebuxen Nybegynder
28. april 2008 - 09:09 #4
Det er et sammensurium af en masse beskrivelser der er lavet gennem de sidste 13 år. Mange af dem indeholder i bund og grund samme budskab og heldigvis har man valgt en formulering som gør det muligt at sige "det der har jeg da læst tidligere".

Så skal man nok kun bruge oplistningen såfremt der er "hit" 2 gange eller mere for at begrænse output...
Avatar billede Lene Fredborg Ekspert
28. april 2008 - 10:38 #5
OK, det kan også lade sig gøre sådan. Dog er det endnu en kompleksitet at indbygge i koden. Du kan evt. udnytte Find til at gennemløbe teksten og sørge for optælling.
Avatar billede luskebuxen Nybegynder
19. maj 2008 - 14:57 #6
Hmm.. ja, opgaven er nok lidt for omfattende end først antaget.

Jeg takker og betaler :o)
Avatar billede Lene Fredborg Ekspert
19. maj 2008 - 15:55 #7
Jeg ved ikke med sikkerhed, hvad du mener med din sidste post. Du har lavet den som et svar - det betyder måske, at du betaler dig selv?
Avatar billede luskebuxen Nybegynder
20. maj 2008 - 16:27 #8
Min browser opfører sig underligt. Jeg ville egentligt bare betale dig... :o)
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
Tag et kursus i Word og øg effektiviteten

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