[Excel] Definierten Text aus Zelle auslesen und in eine andere schreiben

AirB

Grünschnabel
Ich habe folgendes Problem:

In einer Zelle steht eine Zeichenfolge mit sowohl Buchstaben, sowie anderen Symbolen (z.B. "["; ","; etc.), die einen bestimmten Text enthält. Dieser Text ist zufällig in der Zeichenfolge verteilt. Nun möchte ich den Text aus dieser Zeichenfolge auslesen und in eine weitere eintragen lassen, wenn er in einer anderen Zelle schon geschrieben ist (quasi als Vergleichswert). Ist dies möglich und wenn ja wie?
 
Ja ist möglich.
Das wie ist schwer zu sagen.
Du hast also Buchstaben und Sonderzeichen. Irgendwo in diesem Chrüsimüsi ist ein Text versteckt.
Weisst du was für ein Text da drin steht? Oder gibt es Regeln um den Text aus den ganzen Salat herauszufinden?

Und wo soll dieser neue Text denn da rein? Einfach am Schluss? Den bestehenden Text ersetzen?

Mach doch mal einige Beispiele.

So Verstehe ich deine Beschreibung. Und ich bin sicher dass es falsch ist.

Feldinhalt: ",kggl.,[Ortüüfg][fg/flölj"
Gesucht: Ein Wort aus dem Duden: Also "Ort"
Neuer Text aus einem anderen Feld: "Platz"
Irgendwo einfügen: ",kggl.,[Ortüüfg][fg/flPlatzölj"

Sinn macht das ganze nicht.
 
Nicht ganz.
Hier ein Beispiel:

Zelle A1:
KgsgdFf(;'_--[]\fhjuTestbcrgh245x#

Zelle A2:
Tag

Zelle A3:
Test

Zelle A4:
Hallo

Nun soll überprüft werden, ob ein Text aus den Zellen A2,A3 oder A4 in Zelle A1 vorkommt und der Text, der vorkommt (also aus A2,A3 oder A4 ist), soll in Zelle A5 geschrieben

Dann sieht Zelle A5 so aus:
Test
 
Ich kann dir nur die Englischen Befehle liefern. Die Deutschen findest zum Beispiel hier https://excelnova.org/excel-ressourcen/excel-formeln-ubersetzt-englisch-deutsch/
Code:
=IFS(IFERROR(SEARCH(B1;A1);0)>0;B1;IFERROR(SEARCH(C1;A1);0)>0;C1;IFERROR(SEARCH(D1;A1);0)>0;D1)
Oder lesbar fürs Forum geschrieben
Code:
=IFS(
   IFERROR(SEARCH(B1;A1);0)>0;B1;
   IFERROR(SEARCH(C1;A1);0)>0;C1;
   IFERROR(SEARCH(D1;A1);0)>0;D1
)

Gemäss Internet sollte es auf deutsch so aussehen
Code:
=WENNS(
   WENNFEHLER(SUCHEN(B1;A1);0)>0;B1;
   WENNFEHLER(SUCHEN(C1;A1);0)>0;C1;
   WENNFEHLER(SUCHEN(D1;A1);0)>0;D1
)


Es gibt sicher noch elegantere Varianten.

Man könnte auch eine Funktion in VBA schreiben
 
Sorry, aber der Befehl scheint nicht zu funktionieren.

Ich kann dir hier ein konkretes Beispiel geben:

Die Begriffe aus Spalte J sollen mit Zelle A1 verglichen werden. Die Begriffe aus J, die in A1 vorkommen, sollen jeweils in eine andere Spalte geschrieben werden (hier A4 und B4). In Zelle A1 sind diese Begriffe durch | getrennt. Die Zahl, die nach dem Komma steht soll ebenfalls übertragen werden.Beispiel.JPG
 
Eine Funktion mir Regex schreiben

Du du dein Besipiel als Grafik angehängt hast (also kein C&P möglich), muss ich ich mühsam selber eines Basteln. Ist gut möglich, dass es darum wieder nicht deinen Ansprüchen entspricht.

Anwendung in deinem Beispiel:
A4: =extractItem($A$1;$J$1:$J$4;1)
B4: =extractItem($A$1;$J$1:$J$4;2)
C4: =extractItem($A$1;$J$1:$J$4;3)
D4: =extractItem($A$1;$J$1:$J$4;4)

Visual Basic:
'/**
' * @param  Range   Das Feld, in dem der Monsterstring ist
' * @param  Range   Ein Range über alle Suchbegriffe
' * @param  Long    Ausgabeindex. Beginnt mit 1
' * @return String
' */
Public Function extractItem(ByRef iMasterField As Range, ByRef iSearchList As Range, ByVal iNumber As Long) As String
    Dim values() As String
    Dim rx As Object
    Dim mCol As Object
    Dim i
    Dim fld As Range
  
    'Die gesuchten Werte extrahieren
    ReDim values(iSearchList.Rows.Count - 1)
    For Each fld In iSearchList
        values(i) = fld.Value
        i = i + 1
    Next
  
    Set rx = CreateObject("VBScript.RegExp")
    'Pattern: ((?:Tag|Morgen|Abend),\d+)\|
    rx.Pattern = "((?:" & Join(values, "|") & "),\d+)\|"
    rx.Global = True
    rx.IgnoreCase = True        'False, falls Grosskleinschreibung relevant ist
  
    'Kein Treffer, Funktion verlassen
    If Not rx.test(iMasterField.Value) Then Exit Function
  
    Set mCol = rx.Execute(iMasterField.Value)
  
    'Kein Treffer aufdiese Position. Funktion verlassen
    If mCol.Count < iNumber Then Exit Function
  
    'SubMatch 0 aus dem Index-Treffer ausgeben
    extractItem = mCol(iNumber - 1).SubMatches(0)
End Function
 

Anhänge

  • Book1.xlsx
    8,6 KB · Aufrufe: 3

Neue Beiträge

Zurück