1.6k Aufrufe
Gefragt in Tabellenkalkulation von suki Mitglied (131 Punkte)
Hallo zusammen,

ich habe folgendes Makro, bei welchem ich einen einzelnen Buchstaben eingebe, woraufhin mir sämtliche Wörter, die diesen Buchstaben enthalten, in die Tabelle 2 kopiert werden. Nun möchte ich nicht nur nach einzelnen Buchstaben, sondern auch nach Buchstabenfolgen (die ev. auch ganzen Wörtern entsprechen) suchen, in der Tabelle 2 soll dann aber wiederum das ganze Wort angegeben. Kann mir jemand helfen, das Makro entsprechend abzuändern? Vielen Dank!


Option Explicit

Sub suchen_kopieren()

Application.ScreenUpdating = False
Dim Begriff As String, gefunden As Variant, firstAddress As Variant, _
Zeile As Long

Dim strSuchwort() As String
Dim iSuchwort As Integer
Dim iWortlänge As Integer

Begriff = InputBox("suche nach:", "Suchbegriff")
If Begriff = "" Then Exit Sub
With Sheets("Tabelle1").Cells
Set gefunden = .Find(Begriff, LookIn:=xlValues)
If Not gefunden Is Nothing Then
firstAddress = gefunden.Address
Do
'Text aus der gefundenen Zelle in einzelne Wörter aufsplitten
strSuchwort = Split(Range(gefunden.Address), " ")
'Alle Wörter der gefundenen Zelle durchsuchen
For iSuchwort = 0 To UBound(strSuchwort)
'Abgefragtes Wort Buchstabenweise durchsuchen
For iWortlänge = 1 To Len(strSuchwort(iSuchwort))
'Wenn abgefragter Buchstabe mit dem Suchbegriff übereinstimmt, Wort kopieren
If Mid(strSuchwort(iSuchwort), iWortlänge, 1) = Begriff Then
Sheets("Tabelle2").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) = _
strSuchwort(iSuchwort)
End If
Next
Next
Set gefunden = .FindNext(gefunden)
Loop While Not gefunden Is Nothing And gefunden.Address <> firstAddress
End If
End With
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub

3 Antworten

0 Punkte
Beantwortet von paul1 Experte (4.9k Punkte)
Hallo Suki,

probier diesen:

Sub suchen_kopieren2()
Application.ScreenUpdating = False
Dim Begriff As String, gefunden As Variant, firstAddress As Variant
Begriff = InputBox("suche nach:", "Suchbegriff")
If Begriff = "" Then Exit Sub
With Worksheets(1).Cells
Set gefunden = .Find(Begriff, LookIn:=xlValues)
If Not gefunden Is Nothing Then
firstAddress = gefunden.Address
Do
gefunden.Copy
Sheets(2).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial
Set gefunden = .FindNext(gefunden)
Loop While Not gefunden Is Nothing And gefunden.Address <> firstAddress
End If
End With
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub

Sollte das bringen was Du brauchst

Gruß

Paul1
0 Punkte
Beantwortet von suki Mitglied (131 Punkte)
Hallo Paul

vielen Dank! Habe es gerade getestet. Es ist allerdings so, dass der ganze Text einer Zelle kopiert wird damit und nicht nur das gesuchte Wort.

Beispiel:
"Morgen ist Donnerstag"

Wenn ich dann nach "tag" suche, sollte in der Tabelle 2 nicht "Morgen ist Donnerstag" erscheinen, sondern nur "Donnerstag".

Liebe Grüsse
Suki
0 Punkte
Beantwortet von paul1 Experte (4.9k Punkte)
Hallo Suki,

Deine Zusatzfrage ist mir als VBA-nobody um einige Schuhnummern zu groß.

Wünsche Dir weiterhin alles Gute.

Gruß

Paul1
...