Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1412to1416
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

Zeichen zwischen 2 Semikolons, 1X Auftreten suchen

Zeichen zwischen 2 Semikolons, 1X Auftreten suchen
18.03.2015 15:44:54
Nickles
Hallo,
In Anlehnung an meinen letzten Beitrag bei dem mir so super von ransi und luc geholfen wurde wollte ich eine leicht veränderte Funktion basteln.
Ich möchte in einer Liste von Wörtern diejenigen Zeichen/Wörter zwischen 2 Semikolons herauspicken welche nur einmal auftauchen. Am besten wäre es wenn auch noch angezeigt würde in welcher Zeile genau dieses Wort auftaucht, falls dies nicht funktioniert würde ich das vielleicht über ein Zählenwenn oder ähnliches machen.
Also
Userbild
https://www.herber.de/bbs/user/96466.xlsx
Hier mal noch der Code aus dem anderen Beitrag (mit eigenen Variablennamen und Kommentaren wo ich denke das hier definitiv ein Problem auftritt)
Option Explicit
Public Function highlight(woerterkatalog, allewoerter) As Variant 'woerterkatalog und  _
allewoerter wären das selbe
Dim woerter As Object
Dim tempallewoerter
Dim tempmatrix As Variant, matrix As Variant
Dim schonvorhandene As Object
Dim schonvorhanden As Object
Dim woerterbuch As Object
Dim hochzaehlen As Long
tempmatrix = allewoerter
ReDim matrix(1 To UBound(tempmatrix))
For hochzaehlen = 1 To UBound(tempmatrix)
matrix(hochzaehlen) = tempmatrix(hochzaehlen, 1)
Next
tempallewoerter = Join(matrix, " ")
Set woerter = CreateObject("vbScript.Regexp")
With woerter
.Pattern = "[A-ZÄÖÜß0123456789]+"   'müsste man hier was ändern?
.ignorecase = True
.Global = True
If .test(tempallewoerter) = True Then
Set schonvorhandene = .Execute(tempallewoerter)
For Each vorhanden In schonvorhandene
If IsError(Application.Match(vorhanden, woerterkatalog, 0)) Then  'gibt es eine  _
_
application die nach dem einmaligen auftauchen einer Zeichenfolge sucht?
woerterbuch(vorhanden.Value) = 0
End If
Next
End If
End With
highlight = woerterbuch.keys
End Function
Oder würde man dies jetzt gar nicht mit so einem Dictionary machen?
Grüße!

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeichen zwischen 2 Semikolons, 1X Auftreten suchen
18.03.2015 16:03:56
Daniel
Hi
probiers mal mit dieser Funktion:
Function TextNurInDieserZeile(EinzelText As Range, AlleTexte As Range) As String
Dim Zelle As Range
Dim TeilText
TextNurInDieserZeile = ";" & EinzelText(1).Value
TextNurInDieserZeile = Replace(TextNurInDieserZeile, "; ", ";")
For Each Zelle In AlleTexte
If Zelle.Address  EinzelText.Address Then
For Each TeilText In Split(Replace(Zelle.Text, "; ", ";"), ";")
TextNurInDieserZeile = Replace(TextNurInDieserZeile, ";" & TeilText & ";", ";")
Next
End If
Next
If Len(TextNurInDieserZeile) > 2 Then
TextNurInDieserZeile = Mid$(TextNurInDieserZeile, 2, Len(TextNurInDieserZeile) - 2)
Else
TextNurInDieserZeile = ""
End If
End Function
als Formel dann in Zelle E4: =TextNurInDieserZeile(C4;$C$4:$C$7)
dh als erster Parameter die Zelle mit dem Einzelnen Text und als zweiter Parameter dann alle Texte (der Einzeltext darf im zweiten Parameter ebenfalls enhalten sein, das wird geprüft)
Gruß Daniel

Anzeige
AW: Zeichen zwischen 2 Semikolons, 1X Auftreten suchen
18.03.2015 16:14:03
Nickles
Hallo,
danke sehr für die schnelle Hilfe!
Es ist nun allerdings so, das er nur jeweils das zuvor aufgenommene prüft und dann dabei das herauskommt
Userbild

AW: Zeichen zwischen 2 Semikolons, 1X Auftreten suchen
18.03.2015 16:58:33
Daniel
Hi
sorry, verstehe dein Problem nicht.
der Code arbeitet richtig, so wie du es vorgegeben hast.
Das Problem dürfte sein, dass bei dir in der zweiten Zeile nach "Super Wetter" kein Semikolon folgt sondern ein Komma!
Damit sind die Textblöcke zwischen den Semikolons nicht gleich und dürfen nicht gelöscht werden.
Ersetzt du das Komma durch ein Semikolon wie in der ersten Zeile, ist das Formelergebnis so wie bei dir in der optimalen Ausgabe vorgegeben.
Gruß Daniel

Anzeige
AW: Zeichen zwischen 2 Semikolons, 1X Auftreten suchen
18.03.2015 18:04:44
Nickles
Hallo Daniel!
tut mir leid, mein Fehler! Funktioniert ganz hervorragend!
Danke vielmals, dann mache ich mich mal daran diesen zu verstehen :)
Grüße

AW: Zeichen zwischen 2 Semikolons, 1X Auftreten suchen
18.03.2015 18:10:02
Daniel
Ist ganz einfach:
ich übernehme den Text aus der zuerst angegebenen Zelle.
dann laufe ich in einer Schleife über alle Zellen, zerlege die dortigen Texte beim Semikolon in ihre Teiltexte (Split)
Dann ersetzte ich diese Teiltext im Text der Auswertezelle durch nichts.
Am schluss bleiben dann nur die Teiltexte übrig, die in den anderen Zellen nicht vorkommen.
Gruß Daniel

AW: Zeichen zwischen 2 Semikolons, 1X Auftreten suchen
18.03.2015 19:01:09
Nickles
Hi Daniel,
danke auch für die Erklärung
Wenn ich das richtig verstanden habe ist das doch so
Function TextNurInDieserZeile(EinzelText As Range, AlleTexte As Range) As String
Dim Zelle As Range
Dim TeilText
TextNurInDieserZeile = ";" & EinzelText(1).Value   'hier die Zuordnung des Einzeltext.Values  _
sowie ein Semikolon am Anfang zur Variable TextnurInDieserZeile 
TextNurInDieserZeile = Replace(TextNurInDieserZeile, "; ", ";") 'ersetzen von Semikolons mit  _
Leerzeichen dahinter durch solche ohne Leerzeichen

For Each Zelle In AlleTexte
If Zelle.Address  EinzelText.Address Then  ' Wenn Zelle.Address ungleich der  _
Einzeltext.Address ist, dann läuft es los. Hat Zelle.Adress nicht irgendwann den Wert von Einzeltext.Address?
        For Each TeilText In Split(Replace(Zelle.Text, "; ", ";"), ";") 'Aufgesplitet  _
anhand der Semikolons , Zuordnung der Splits zu TeilText
            TextNurInDieserZeile = Replace(TextNurInDieserZeile, ";" & TeilText & ";", ";")  _
'Wenn Teiltext in TextNurInDieserZeile gefunden wird, wird ;TeilText; durch ; ersetzt. Müsste das nicht auch schon passieren wenn er das Wort das erste Mal findet?
        Next
End If
Next
If Len(TextNurInDieserZeile) > 2 Then   'Semikolon + mindestens 2 Buchstaben sonst else
TextNurInDieserZeile = Mid$(TextNurInDieserZeile, 2, Len(TextNurInDieserZeile) - 2) 'das  _
hier geht mir partout nicht in den Kopf, die Anzahl der Zeichen die extrahiert wird, müsste diese nicht -1 sein? bei ;Fisch wären das doch 5 zu extrahierende, minus das Zeichen für das Semikolon.
Else
TextNurInDieserZeile = ""
End If
End Function
Grüße

Anzeige
AW: Zeichen zwischen 2 Semikolons, 1X Auftreten suchen
18.03.2015 19:17:50
Daniel
Hi
in der Replace-Funktion wird überhaupt das erste mal nach den Teiltexten im Text der Einzelzelle gesucht! Vorher suche ich nicht. Es muss auch nicht explizit gesucht werden, Replace macht das automatisch und wenn der zu ersetzende Text nicht vorkommt, wird nichts ersetzt.
am Schluss entferne ich nur die Semikolons am Anfang und am Ende des Teiltextes.
diese Semikolons am Anfang und am Ende werden benötigt wenn bespielsweise der Teiltext "anne" erssetzt werden soll, dann darf der "Tannenbaum" ja nicht zum "Tnbaum" werden, deswegen nimmt man die Semikolons beim Suchen und ersetzen mit dazu, weil ";anne;" den ";Tannenbaum;" nicht findet.
Die hinzugefügten Semikola am Anfang und Ende sorgen dafür, dass hier keine Sonderfälle entstehen, die man extra betrachten muss.
Beim Endergbnis sind sie aber meist unerwünscht, deswegen entfernt man sie.
Gruß Daniel

Anzeige
AW: Zeichen zwischen 2 Semikolons, 1X Auftreten suchen
18.03.2015 20:48:28
Nickles
Hallo,
danke sehr! Gute Erklärung.
Wenn aber zwei Ausdrücke in der gleichen Zeile stehen funktioniert der Code nicht oder?
Also bspw.
Hallo; Super Wetter; es passt alles; und so weiter; Fisch gekauft; Fisch gekauft;
Hat bei mir dann die Ausgabe
Fisch gekauft;Fisch gekauft zur Folge.
Liegt daran das jede Zelle überprüft wird bis auf die Zelle in der der Code gerade steckt oder?
Müsste man hier dann wieder zu einer Zwischenspeicherung greifen?
Grüße

AW: Zeichen zwischen 2 Semikolons, 1X Auftreten suchen
18.03.2015 20:59:33
Daniel
HI
ja die Textteile der Zelle, die gerade überprüft wird, werden natürlich nicht verwendet.
Sonst gibts am Schluss nur nen Leerstring als Ergebnis.
Gruß Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige