Avatar billede lortepc Nybegynder
16. november 2009 - 18:43 Der er 18 kommentarer og
1 løsning

Søgning efter ord i tekststreng

Hej Alle

Jeg har et regneark hvor kolonne A indeholder alle mine søgeord
I det andet regneark har jeg Kolonne A med en masse tekststrenge stående i et vilkårligt antal rækker.
Jeg vil gerne i det andet regneark i kolonne B ud for hver streng vise forekomsterne af søgningen i form af det søgte ord.
Ordet forekommer med sikkerhed kun 1 gang i tekststrengen.

På forhånd tak!
Avatar billede jkrons Professor
16. november 2009 - 23:57 #1
Prøv med noget i denne stil:

=MIDT(A1;FIND(Ark1!$A$1;A1;1);FIND(" ";A1))

hvor Ark!A1 er det ord, du vil finde i tekststrengen, og A1 er den celle, der indeholder tekststrengen.
Avatar billede lortepc Nybegynder
17. november 2009 - 00:54 #2
det vil da ikke kunne virke, jeg har 10 ord som den skal lede efter i 30-50rækker med tekststrenge.
Avatar billede jkrons Professor
17. november 2009 - 09:47 #3
Skal den lede efter alle 10 ord i alle tekststrenge?
Avatar billede jkrons Professor
17. november 2009 - 10:59 #4
Prøv med denne makro. Marker cellerne med tekststrengei Ark2 og ret evt. området i ark1, hvor du har søgeord i.

Sub FindOrd()
    Dim varX As String
    Dim FindOrd As String
    Dim varY As String
    Dim sgrd As Range
    sgrd = InputBox("Indtast område i Ark 1 med søgeord")
    FindOrd = ""
        For Each c In Selection.Cells
            FindOrd = ""
            For Each x In Sheets(1).Range("A1:A10").Cells
                varX = InStr(1, c.Value, x.Value)
                If varX <> 0 Then
                    varY = InStr(varX, c.Value, " ")
                    If varY = 0 Then
                        FindOrd = FindOrd & Mid(c.Value, varX, Len(c.Value)) & ", "
                    Else
                        FindOrd = FindOrd & Mid(c.Value, varX, varY - varX) & ", "
                    End If
                End If
            Next x
            c.Offset(0, 1).Value = FindOrd
        Next c
End Sub
Avatar billede jkrons Professor
17. november 2009 - 11:00 #5
Prv denne makro. Ret evt. området i Ark1, som du har søgeord i fra A1:A10 til det rigtige. Marker derefter cellerne med tekststrenge i Ark2 og afspil makroen:

Sub FindOrd()
    Dim varX As String
    Dim FindOrd As String
    Dim varY As String
    Dim sgrd As Range
    sgrd = InputBox("Indtast område i Ark 1 med søgeord")
    FindOrd = ""
        For Each c In Selection.Cells
            FindOrd = ""
            For Each x In Sheets(1).Range("A1:A10").Cells
                varX = InStr(1, c.Value, x.Value)
                If varX <> 0 Then
                    varY = InStr(varX, c.Value, " ")
                    If varY = 0 Then
                        FindOrd = FindOrd & Mid(c.Value, varX, Len(c.Value)) & ", "
                    Else
                        FindOrd = FindOrd & Mid(c.Value, varX, varY - varX) & ", "
                    End If
                End If
            Next x
            c.Offset(0, 1).Value = FindOrd
        Next c
End Sub
Avatar billede lortepc Nybegynder
17. november 2009 - 13:25 #6
Hej jkrons

Kan du ikke lave det uden den inputboks? er ik så skarp i vba...
Jeg har 2 workbooks, hhv. søgeord og strenge.
Workbooks("Book1").Worksheets("Sheet1")
Workbooks("Book2").Worksheets("Sheet1")

Har prøvet at rette din kode til men får det ikke rigtig til at spille...

TAK!!!
Avatar billede jkrons Professor
17. november 2009 - 15:52 #7
Aha. Jeg troede, at når du sagde to ark, mente du to ark i samme mappe. Jeg prøver at se om jeg kan ændre koden. Inputboxewn er nem at fjerne. Den virkede alligevel ikke :-(. Bare slet disse linjer:

    Dim sgrd As Range
    sgrd = InputBox("Indtast område i Ark 1 med søgeord")
Avatar billede lortepc Nybegynder
17. november 2009 - 15:58 #8
Ja min fejl mht. ark ;) prøvede osse at fjerne det, men det så ik helt rigtigt ud alligevel, ser frem til dit forslag!
Avatar billede jkrons Professor
17. november 2009 - 16:02 #9
Er begge projektmapper åbne på forhånd, når du skal bruge funktionen?
Avatar billede lortepc Nybegynder
17. november 2009 - 16:06 #10
yep
Avatar billede jkrons Professor
17. november 2009 - 16:11 #11
Så prøv med

Sub FindOrd()
On Error Resume Next
    Dim varX As String
    Dim FindOrd As String
    Dim varY As String
    FindOrd = ""
        For Each c In Selection.Cells
            FindOrd = ""
            For Each x In Workbooks("Book1.xls").Sheets(1).Range("A1:A10").Cells
                varX = InStr(1, c.Value, x.Value)
                If varX <> 0 Then
                    varY = InStr(varX, c.Value, " ")
                    If varY = 0 Then
                        FindOrd = FindOrd & Mid(c.Value, varX, Len(c.Value)) & ", "
                    Else
                        FindOrd = FindOrd & Mid(c.Value, varX, varY - varX) & ", "
                    End If
                End If
            Next x
            c.Offset(0, 1).Value = FindOrd
        Next c
End Sub

Koden skal ligge i den mappe, der indeholder tekststrengene (fordusætter at det er Book2), ikke i den, der indeholder søgeordene.
Avatar billede jkrons Professor
17. november 2009 - 16:12 #12
Du skal have arket med tekststrengene aktivt, og disse markerede, når du afspiller koden.
Avatar billede lortepc Nybegynder
17. november 2009 - 16:40 #13
perfekt!!! jkrons...
Smid et svar!
Tusind tak!
Avatar billede jkrons Professor
17. november 2009 - 16:46 #14
Velbekomme .-)
Avatar billede lortepc Nybegynder
17. november 2009 - 17:19 #15
hurtigt sidespørgsmål, hvordan vælger jeg automatisk alle celler i kolonne A i begge ark, A1:A10 er jo variabel i længde er sommetider A1:A23
Avatar billede jkrons Professor
17. november 2009 - 17:31 #16
Det nemmeste er nok at vælge et område, der er stort nok, fx A1:A30. Hvis der ikke står noget i cellerne, er der jo heller ikke noget at sammenligne med.
Avatar billede jkrons Professor
17. november 2009 - 17:33 #17
I det andet ark skal du jo markere inden du afspiller makroen. Den kunne nok ændres til selv at finde områderne, men det har jeg desværre ikke tid til at se nærmere på lige nu. :-)
Avatar billede lortepc Nybegynder
17. november 2009 - 17:36 #18
Det var osse min første tanke, men det virker ikke. Koden sætter ordene fra start og slut af strengen ind hvis den møder en tom celle??? Så vidt jeg husker
Avatar billede jkrons Professor
18. november 2009 - 00:27 #19
Prøv denne:

Sub FindOrd()
    Dim varX As String
    Dim FindOrd As String
    Dim varY As String
    Dim var1 As String
    Application.ScreenUpdating = False
    var1 = Workbooks("book1.xls").Sheets(1).Range("$A$1").Address & ":" _
        & Workbooks("book1.xls").Sheets(1).Range("a65536").End(xlUp).Address
    FindOrd = ""
        For Each c In Selection.Cells
            FindOrd = ""
            For Each x In Workbooks("Book1.xls").Sheets(1).Range(var1).Cells
                varX = InStr(1, c.Value, x.Value)
                If varX <> 0 Then
                    varY = InStr(varX, c.Value, " ")
                    If varY = 0 Then
                        FindOrd = FindOrd & Mid(c.Value, varX, Len(c.Value)) & ", "
                    Else
                        FindOrd = FindOrd & Mid(c.Value, varX, varY - varX) & ", "
                    End If
                End If
            Next x
            c.Offset(0, 1).Value = FindOrd
        Next c
    Application.ScreenUpdating = True
End Sub
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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