Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: String suchen innerhalb einer Zeichenkette

String suchen innerhalb einer Zeichenkette
14.05.2016 16:20:25
Constantin
Hallo,
ich komme leider nicht ganz klar mit folgendem Problem, wo es darum geht, dass ich einen String innerhalb einer anderen Zeichenkette finden möchte. Falls vorhanden, soll in der Nebenspalte ein Wert zugewiesen werden.
Dafür habe ich in Tabelle1 in Spalte 1 ab Zeile 2 verschiedene Bezeichnungen stehen, z.B "dies ist ein Text A123". In Tabelle2 habe ich in Spalte 1 meine Suchbegriffe stehen, z.B. A123 und daneben einen Wert, z.B. "Schlüssel 3". Nun möchte ich alle meine Suchbegriffe aus Tabelle 2, Spalte 1 durchgehen und prüfen, ob diese in Tabelle1, Spalte 1 irgendwo enthalten sind. Falls gefunden, wird der Schlüssel übertragen. Sollte eine Bezeichnung zwei Suchbegriffe enthalten, würde das Ergebnis z.B. "Schlüssel 3/Schlüssel 5" lauten. Groß-/Kleinschreibung wird nicht unterschieden.
Wie könnte ich das am besten angehen?
Im voraus vielen Dank für Unterstützung.
Grüße, Constantin
https://www.herber.de/bbs/user/105561.xlsx

Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: =suchen()/=finden() owT
14.05.2016 16:34:35
Fennek
versuche das

AW: =suchen()/=finden() owT
14.05.2016 16:56:17
Constantin
Hallo Fennek,
danke dir für diesen Tipp. Ich werde mir diese Funktion noch näher anschauen. In diesen Fall muss ich jedoch mit jedem einzelnen Suchbegriff alle Bezeichnungen durchgehen, ob dieser enthalten ist. Wie müsste ich das mit VBA formulieren?
Grüße, Constantin

Anzeige
AW: =suchen()/=finden() owT
14.05.2016 17:00:41
Fennek
Hallo,
der entsprechende vba-Befehl ist instr().
mfg

AW: String suchen innerhalb einer Zeichenkette
14.05.2016 17:23:36
Daniel
Hi
das musst du sowieso mit VBA programmieren, weil es in deiner Excelversion noch keine Funktionen zum zusammenfassen von Texten gibt (Verketten hilft hier nicht weiter)
dieser Code in ein allgemeines Modul (Modul1)
Function SchlüsselZuweisen(txt As String, Typ As Range, Schlüssel As Range) As String
Dim arrT, arrS
Dim z As Long
arrT = Intersect(Typ, Typ.Worksheet.UsedRange).Value
arrS = Intersect(Schlüssel, Schlüssel.Worksheet.UsedRange).Value
For z = 1 To UBound(arrT, 1)
If arrT(z, 1)  "" Then
If UCase(txt) Like UCase("*" & arrT(z, 1) & "*") Then
SchlüsselZuweisen = SchlüsselZuweisen & "/" & arrS(z, 1)
End If
End If
Next
If Len(SchlüsselZuweisen) > 0 Then SchlüsselZuweisen = Mid(SchlüsselZuweisen, 2)
End Function
in die Zelle B2 dann die Formel:
=SchlüsselZuweisen(A2;Tabelle2!A:A;Tabelle2!B:B)
die Anordnung der Schlüssel im Formelergebnis ist gleich der Reihenfolge in Tabelle2
Gruß Daniel

Anzeige
AW: String suchen innerhalb einer Zeichenkette
14.05.2016 18:09:47
Constantin
Hallo Daniel,
danke für diese Funktion. Im Moment liefert sie mir das Ergebnis #Wert!. Könntest du sie mir evtl. in die Datei kopieren? Leider ist sie für mich etwas komplex. Vielleicht liegt es auch an den Klammern, die bei mir automatisch gesetzt werden (siehe unten).
Ziel ist, mit jedem Suchbegriff der Tabelle2, z.B. A123, die Bezeichnungen in Tabelle1 zu durchsuchen und wenn gefunden, dann den Schlüssel danebenzuschreiben. Und da jede Bezeichnung mit jedem Suchbegriff angefahren wird, könnte eine Zelle, die einen Schlüssel (Text) hat, um den neuen ergänzt werden.
Grüße, Constantin
P.S.: automatisch werden bei mir Klammern gesetzt: =SchlüsselZuweisen(A2;Tabelle2!A:(A);Tabelle2!B:(B))

Anzeige
AW: gelöst
14.05.2016 19:33:59
Constantin
Hallo Daniel,
ich hab's (nach langem Probieren) nun doch hinbekommen mit einer (angepassten) Find()-Routine (xlpart-Suche). Ich wäre allerdings sehr neugierig, woran es bei mir mit der Funktion (bzw. den Klammern) gelegen haben könnte.
Danke dir und Fennek für die Unterstützung.
Grüße, Constantin

Anzeige
AW: gelöst
14.05.2016 21:30:06
Piet
Hallo Constantin,
da war ich wohl etwas zu langsam, hatte bereits ein Makro entwickelt.
Hier der vollstaendigkeit halber meine Makro Lösung. Bin gerade fertig geworden.
mfg Piet
Option Explicit      '14.5.2016  Piet für Herber Forum
Dim Tab1 As Object, lz1 As Long
Dim Tab2 As Object, lz2 As Long
Dim AC As Object, rFind As Object
Dim Adr1 As String, AdrN As String
Dim Schlüssel As String, Txt As String
Dim SuchName As String
'Zeichen suchen ; Schlüssel notieren
'Variante 1:  mit Space bei Schlüssel
Sub Suche_Zeichen_in_Zeichenkette_1()
Set Tab1 = Worksheets("Tabelle1")   'Tabelle1
Set Tab2 = Worksheets("Tabelle2")   'Tabelle2
'letzte Zeile in Tabelle 1+2 finden
lz1 = Tab1.Range("A2").End(xlDown).Row
lz2 = Tab2.Range("A2").End(xlDown).Row
'alte Schlüssel Tabelle in B löschen
Tab1.Range("B2:B" & lz1).ClearContents
'Schleife für alle Typen in Tabelle2 Spalte "A"
For Each AC In Tab2.Range("A2:A" & lz2)
'Such-Name laden:  (ohne oder mit Space)
SuchName = AC.Value    'Such-Name ohne Space
'Suchlauf nach AC Wert in Tabelle1 Spalte "A"
Set rFind = Tab1.Range("A1:A" & lz1).Find(What:=SuchName, After:=Tab2.Range("A1"), _
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:= _
xlNext, MatchCase:=False, SearchFormat:=False)
If Not rFind Is Nothing Then
Adr1 = rFind.Address           '1. gefundene Adresse
AdrN = rFind.Address           '1. next Adresse
Schlüssel = AC.Cells(1, 2)     '"B" Schlüssel laden
'Text aus Spalte B laden  (voriger Schlüssel)
Txt = rFind.Cells(1, 2).Value
If InStr(Txt, Schlüssel) = 0 Then
If Txt  "" Then Txt = Txt & " / "   'mit Space
rFind.Cells(1, 2) = Txt & Schlüssel   '1. Gefund. Schlüssel
End If
Do  'Do Loop für weitere Typen bis End Zeile
Set rFind = Tab1.Range("A2:A" & lz1).FindNext(After:=Tab2.Range(AdrN))
If rFind Is Nothing Then Exit Do Else AdrN = rFind.Address
'Text aus Spalte B laden  (voriger Schlüssel)
Txt = rFind.Cells(1, 2).Value
If InStr(Txt, Schlüssel) = 0 Then
If Txt  "" Then Txt = Txt & " / "   'mit Space
rFind.Cells(1, 2) = Txt & Schlüssel   'next Schlüssel
End If
Loop Until AdrN = Adr1
End If
Next AC
End S
ub

Anzeige
AW: danke
15.05.2016 08:43:21
Constantin
Hallo Piet,
du warst nicht zu langsam - ich war zu schnell (und zu optimistisch). Umso mehr freue ich mich über deine Lösung. Hat mich gerettet.
Vielen Dank.
Grüße, Constantin

AW: freut mich sehr
15.05.2016 17:50:35
Piet
Hallo Christian,
ich wollte meine Lösung zuerst nicht schicken, dachte die Sache sei erledigt.
Dann tat es mir leid um meine Arbeit, und ich dachte: - schick sie doch !!
Das war wohl der richtige Gedanke, oder Thelepathie? Hauptsache es klappt.
Dein Danke hat mich sehr gefreut. Danke zurück.
mfg Piet
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Strings in Excel VBA suchen und zuweisen


Schritt-für-Schritt-Anleitung

Um Zeichen in einem String innerhalb von Excel VBA zu suchen und entsprechende Werte zuzuweisen, befolge diese Schritte:

  1. Öffne das VBA-Editor in Excel mit ALT + F11.

  2. Erstelle ein neues Modul:

    • Klicke mit der rechten Maustaste auf „VBAProject (deineDatei.xlsx)“.
    • Wähle „Einfügen“ und dann „Modul“.
  3. Füge den folgenden Code ein, um die Funktion zum Suchen der Zeichen zu erstellen:

    Function SchlüsselZuweisen(txt As String, Typ As Range, Schlüssel As Range) As String
        Dim arrT, arrS
        Dim z As Long
        arrT = Intersect(Typ, Typ.Worksheet.UsedRange).Value
        arrS = Intersect(Schlüssel, Schlüssel.Worksheet.UsedRange).Value
        For z = 1 To UBound(arrT, 1)
            If arrT(z, 1) <> "" Then
                If UCase(txt) Like UCase("*" & arrT(z, 1) & "*") Then
                    SchlüsselZuweisen = SchlüsselZuweisen & "/" & arrS(z, 1)
                End If
            End If
        Next
        If Len(SchlüsselZuweisen) > 0 Then SchlüsselZuweisen = Mid(SchlüsselZuweisen, 2)
    End Function
  4. Verwende die Formel in der Excel-Tabelle:

    • Gehe zu Zelle B2 und schreibe folgende Formel:
    =SchlüsselZuweisen(A2;Tabelle2!A:A;Tabelle2!B:B)
  5. Ziehe die Formel nach unten, um sie auf andere Zellen anzuwenden.


Häufige Fehler und Lösungen

  • Fehler #WERT!: Überprüfe, ob die Zellverweise korrekt sind und die angegebenen Bereiche existieren.
  • Klammern werden automatisch hinzugefügt: Stelle sicher, dass deine Excel-Version die korrekten Syntaxregeln für VBA unterstützt, und überprüfe die Formatierung der Formel.
  • Keine Ergebnisse: Vergewissere dich, dass die Suchbegriffe in Tabelle2 tatsächlich in den Bezeichnungen in Tabelle1 enthalten sind.

Alternative Methoden

Falls Du nicht mit VBA arbeiten möchtest, kannst Du die integrierten Excel-Funktionen SUCHEN oder FINDEN verwenden, um ähnliche Ergebnisse zu erzielen. Allerdings müssen diese Funktionen manuell auf jeden Suchbegriff angewandt werden, was bei vielen Einträgen unpraktisch ist.


Praktische Beispiele

  1. Beispiel für die Verwendung von VBA:

    • Stelle sicher, dass in Tabelle1 die Bezeichnung „dies ist ein Text A123“ steht und in Tabelle2 die Suchbegriffe „A123“ und „Schlüssel 3“. Die Formel wird dann den Schlüssel „Schlüssel 3“ in der Nebenspalte anzeigen.
  2. Erweiterung der Funktion:

    • Wenn Du die Funktion anpassen möchtest, um mehrere Suchbegriffe zu verarbeiten, kannst Du eine Schleife in VBA verwenden, um alle Suchbegriffe durchzugehen und die entsprechenden Schlüssel zusammenzuführen.

Tipps für Profis

  • Nutze die InStr-Funktion, um die Suche nach Zeichen in Strings zu optimieren.
  • Arbeite mit Option Explicit, um sicherzustellen, dass alle Variablen deklariert sind, was zu weniger Fehlern führt.
  • Verwende xlPart im Find-Befehl, um Teilstrings zu suchen, was die Flexibilität erhöht.

FAQ: Häufige Fragen

1. Wie kann ich in einem String nur nach bestimmten Zeichen suchen?
Du kannst die InStr-Funktion verwenden, um die Position eines bestimmten Zeichens im String zu finden.

2. Ist es möglich, Groß- und Kleinschreibung beim Suchen zu ignorieren?
Ja, indem Du die Strings mit UCase oder LCase vergleichst, kannst Du die Groß-/Kleinschreibung ignorieren.

3. Wie kann ich die Suche auf mehrere Spalten erweitern?
Du kannst die Funktion anpassen, indem Du mehrere Range-Objekte übergibst und die Schleife entsprechend erweiterst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige