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

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

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

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

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

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige