16. november 2009 - 18:43Der 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.
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
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
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...
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")
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.
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.
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. :-)
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
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
Synes godt om
Ny brugerNybegynder
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.