Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1576to1580
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Worte/Teilworte suchen und zählen

Worte/Teilworte suchen und zählen
11.09.2017 12:08:54
Patrick
Hallo liebes Herber-Forum,
ich bräuchte eure Hilfe bei der Suche nach Worten in einem Text.
Ich habe folgende, exemplarische Exceldatei:
Tabelle "Originaltext"
In den Zellen B1, B3 und B4 befindet sich der Text, denn ich nach Suchworte durchsuchen möchte.
Tabelle "Auswertung"
In der Spalte B4 ff. befindet sich eine Liste mit Suchworten, die ich in der Tabelle "Originaltext" gerne finden und Zählen würde. Hierbei unterscheide ich aber auch den Ort an dem das Suchwort vorkommt:
Titel := Zelle B3 in Tabelle "Originaltext"
Text := alles andere sind Textfelder, also Zellen B1 und B5 in der Tabelle "Originaltext"
Was genau soll ein VBA-Makro jetzt machen?
Gelöst habe ich das ganze bereits mit normalen Excel-Befehlen. Allerdings werden mehrere Texte (Tabelle "Originaltext-1" bis Originaltext-x") durchsucht und die Anzahl der Suchworte variiert von 5 bis 20 oder mehr. Da funktionieren Matrix-Befehle {} nur noch bedingt und dauert eventuell etwas länger. Daher erhoffe ich mir mit einem VBA-Makro Schnelligkeit und Genauigkeit.
Das Makro soll sich das erste Suchworte (Tabelle "Auswertung", Zelle "b4") nehmen, und im Originaltext danach suchen. Sobald es das Wort findet, soll es unterscheiden, ob es sich um einen Voll- oder Teiltreffer handelt.
Volltreffer := es stimmt 100% mit dem Original über ein (Großschreibung ist allerdings egal)
Teiltreffer := das Suchwort ist Teil eines Wortes
Die Voll_ und Teiltreffer sollen gezählt und ihre Summe - je nach Position im Originaltext - in der Tabelle "Auswertung" ausgegeben werden.
Beispielmappe:
https://www.herber.de/bbs/user/116150.xlsx
In der Beispielmappe habe ich mal einen Beispieltext hinterlegt und die Summen der drei Beispielsuchworte in die Auswertungstabelle übertragen.
Kann mir jemand das Grundgerüst zeigen und mir erklären, was genau in dem Makro passiert? Ich will das endlich auch lernen.
Danke schon einmal vorab für Eure Hilfe.
Lieben "herbstlichen" Gruß
Patrick

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Worte/Teilworte suchen und zählen
11.09.2017 13:12:02
Daniel
Hi
kopiere mal diese beiden Funktionen in ein allgemeines Modul:
Function AnzahlVollTreffer(GesamtText As String, Suchwort As String) As Long
Const Satzzeichen As String = ".,;:!?"""
Dim i As Long
If Len(Suchwort) = 0 Then Exit Function
'--- Groß/Kleinschreibung gleich
GesamtText = LCase(GesamtText)
Suchwort = LCase(Suchwort)
'---Satzzeichen durch Leerzeichen austauschen
For i = 1 To Len(Satzzeichen)
GesamtText = Replace(GesamtText, Mid(Satzzeichen, i, 1), " ")
Next
'--- Leerzeichen verdoppeln und an Anfang und Ende einfügen
GesamtText = WorksheetFunction.Trim(GesamtText)
GesamtText = Replace(GesamtText, " ", "  ")
GesamtText = " " & GesamtText & " "
'--- Anzahl Volltreffer ermitteln, hierzu wird im gesamttext das gesuchte Wort
'--- durch nichts ersetzt. Aus der Längendifferenz ergibt sich die Anzahl
'--- des Suchwortes im text
AnzahlVollTreffer = _
(Len(GesamtText) - Len(Replace(GesamtText, " " & Suchwort & " ", "  "))) / Len(Suchwort)
End Function
Function AnzahlTeilTreffer(GesamtText As String, Suchwort As String) As Long
Const Satzzeichen As String = ".,;:!?"""
Dim i As Long
If Len(Suchwort) = 0 Then Exit Function
'--- Groß/Kleinschreibung gleich
GesamtText = LCase(GesamtText)
Suchwort = LCase(Suchwort)
'--- Anzahl Volltreffer ermitteln, hierzu wird im gesamttext das gesuchte Wort
'--- durch nichts ersetzt. Aus der Längendifferenz ergibt sich die Anzahl
'---- des Suchwortes im text
AnzahlTeilTreffer = _
(Len(GesamtText) - Len(Replace(GesamtText, Suchwort, ""))) / Len(Suchwort)
End Function
das Prinzip ist eigentlich ganz einfach:
man ersetzt im Gesamttext den Suchtext durch nichts, bildet die Längendifferenz zwischen beiden Texten und teilt diese durch die Länge des Suchwortes.
beim Suchen nach den Volltreffern wird's etwas aufwendiger, weil ein ganzes Wort nicht immer von Leerzeichen begrenzt ist, sondern machmal auch von Satzzeichen.
Beachte weiterhin, dass die Menge der Volltreffer eine Untermenge der Teiltreffer ist.
Wenn du die Anzahl der echten Teiltreffer haben willst, musst du von der Menge der Teiltreffer die Menge der Volltreffer abziehen (die echten Teiltreffer alleine zu ermitteln wäre sehr aufwendig)
in die Zellen muss dann folgende Formel:
Blatt Auswertung F4: =AnzahlVollTreffer(Originaltext!$B$1&" "&Originaltext!$B$5;B4)
Blatt Auswertung G4: =AnzahlTeilTreffer(Originaltext!$B$1&" "&Originaltext!B5;$B$4)-F4
Gruß Daniel
Anzeige
AW: Worte/Teilworte suchen und zählen
11.09.2017 13:25:33
mmat
Hallo,
hatten wir diese Anfrage nicht schonmal vor kurzem? ;-)
OK, das ist ein anderer Lösungsansatz als der von Daniel, um das vorkommen von Wörtern in einem Text zu zählen:
Sub test()
Dim b As String, s As String, v As Long, t As Long
b = Cells(5, 2): s = "Buchhalter"
Treffer b, s, v, t
Cells(5, 3) = v
Cells(5, 4) = t
End Sub
'suche String s in Text b und liefere die anzahl der Voll- und Teiltreffer in v und t zurück
Sub Treffer(ByVal b As String, ByVal s As String, ByRef v As Long, ByRef t As Long)
Dim p As Long, l As Long
b = LCase(b): s = LCase(s): v = 0: t = 0
l = Len(s)
p = InStr(b, s)
While (p > 0)
If IsWord(b, p, l) Then v = v + 1 Else t = t + 1
p = InStr(p + l, b, s)
Wend
End Sub
Function IsWord(ByRef s As String, p As Long, l As Long) As Boolean
Const letters = "abcdefghijklmnopqrstuvwxyzäöüß"
IsWord = False
If InStr(letters, LCase(Mid(s, p - 1, 1))) > 0 Then Exit Function
If InStr(letters, LCase(Mid(s, p + l, 1))) > 0 Then Exit Function
IsWord = True
End Function
Such dir halt einen aus ...
Anzeige
AW: Worte/Teilworte suchen und zählen
12.09.2017 00:14:04
Patrick
Hallo ihr 2,
herzlichen Dank für die Hilfe.
Zwischenzeitlich habe ich auch mein Glück versucht und .. siehe da... ich habs tatsächlich hinbekommen. Mit Hilfe dieses Forums kann man echt VBA lernen... Danke euch allen.
Ich schaue mir trotzdem ncoh beide Lösungsvorschläge genauer an. Ich habe da schon ein, zwei Ideen gesehen, wie man es auch lösen könnte. Insbeosnere die eine Replace-Funktion mithilfe des Strings ist viel eleganter als meine 50 Zeilen mit Zelle.Value = Replace(Zelle.Value, ":", " ") usw.
Danke euch beiden.
Lieben Gruß
Patrick
'glücklich'

308 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige