it-swarm.com.de

Wie kann ich eine umgekehrte Zeichenfolgen-Suche in Excel durchführen, ohne VBA zu verwenden?

Ich habe eine Excel-Tabelle mit einer Liste von Strings. Jede Zeichenfolge besteht aus mehreren Wörtern, aber die Anzahl der Wörter in jeder Zeichenfolge ist unterschiedlich.

Gibt es eine Möglichkeit, mit Hilfe der eingebauten Excel-Funktionen (keine VBA) das letzte Wort in jedem String zu isolieren?

Beispiele:

 Sind Sie als menschlich eingestuft? -> Mensch? 
 Negativ, ich bin ein Eis am Stiel -> Eis am Stiel 
 Aziz! Licht! -> Licht!
150
e.James

Dieser ist getestet und funktioniert (basierend auf Brads ursprünglichem Beitrag):

=RIGHT(A1,LEN(A1)-FIND("|",SUBSTITUTE(A1," ","|",
     LEN(A1)-LEN(SUBSTITUTE(A1," ","")))))

Wenn Ihre ursprünglichen Zeichenfolgen eine Pipe enthalten könnten, "|" Ersetzen Sie dann beide Zeichen durch ein anderes Zeichen, das nicht in Ihrer Quelle angezeigt wird. (Ich vermute, dass das Original von Brad gebrochen wurde, weil ein nicht druckbarer Charakter in der Übersetzung entfernt wurde).

Bonus: Wie es funktioniert (von rechts nach links):

LEN(A1)-LEN(SUBSTITUTE(A1," ","")) - Anzahl der Leerzeichen in der ursprünglichen Zeichenfolge
SUBSTITUTE(A1," ","|", ... ) - Ersetzt nur das final - Leerzeichen durch einen |
FIND("|", ... ) - Findet die absolute Position des ersetzten | (das war das letzte Leerzeichen)
Right(A1,LEN(A1) - ... )) - Liefert alle Zeichen danach |

EDIT: Um den Fall zu berücksichtigen, in dem der Quelltext keine Leerzeichen enthält, fügen Sie am Anfang der Formel Folgendes hinzu:

=IF(ISERROR(FIND(" ",A1)),A1, ... )

jetzt die ganze Formel erstellen:

=IF(ISERROR(FIND(" ",A1)),A1, RIGHT(A1,LEN(A1) - FIND("|",
    SUBSTITUTE(A1," ","|",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))))

Oder Sie können die =IF(COUNTIF(A1,"* *")-Syntax der anderen Version verwenden.

Wenn die ursprüngliche Zeichenfolge ein Leerzeichen an der letzten Position enthalten kann, fügen Sie eine Trimmfunktion hinzu, während Sie alle Leerzeichen zählen: Führen Sie die Funktion folgendermaßen aus:

=IF(ISERROR(FIND(" ",B2)),B2, RIGHT(B2,LEN(B2) - FIND("|",
    SUBSTITUTE(B2," ","|",LEN(TRIM(B2))-LEN(SUBSTITUTE(B2," ",""))))))
193
BradC

Dies ist die Technik, die ich mit großem Erfolg eingesetzt habe:

=TRIM(RIGHT(SUBSTITUTE(A1, " ", REPT(" ", 100)), 100))

Um das erste Wort in einer Zeichenfolge zu erhalten, wechseln Sie einfach von RECHTS nach LINKS

=TRIM(LEFT(SUBSTITUTE(A1, " ", REPT(" ", 100)), 100))

Ersetzen Sie A1 auch durch die Zelle, die den Text enthält.

77
Jerry Beaucaire

Eine robustere Version von Jerrys Antwort:

=TRIM(RIGHT(SUBSTITUTE(TRIM(A1), " ", REPT(" ", LEN(TRIM(A1)))), LEN(TRIM(A1))))

Das funktioniert unabhängig von der Länge der Zeichenfolge, führenden oder nachgestellten Leerzeichen oder was auch immer und ist immer noch recht kurz und einfach.

19
Joe Finkle

Ich habe das bei Google gefunden, in Excel 2003 getestet und es funktioniert für mich:

=IF(COUNTIF(A1,"* *"),RIGHT(A1,LEN(A1)-LOOKUP(LEN(A1),FIND(" ",A1,ROW(INDEX($A:$A,1,1):INDEX($A:$A,LEN(A1),1))))),A1)

[edit] Ich habe nicht genug Repräsentanten, um einen Kommentar abzugeben, daher scheint dies der beste Ort zu sein. Die Antwort von BradC funktioniert auch nicht mit nachgestellten Leerzeichen oder leeren Zellen ...
[2nd edit] funktioniert eigentlich nicht für einzelne Wörter ...

12
Jon

Dies ist sehr sauber und kompakt und funktioniert gut.

{=RIGHT(A1,LEN(A1)-MAX(IF(MID(A1,ROW(1:999),1)=" ",ROW(1:999),0)))}

Es wird keine Fehlerfalle für keine Leerzeichen oder ein Wort ausgegeben, aber das ist einfach hinzuzufügen.

Bearbeiten:
Hier werden Leerzeichen, Einzelwort- und leere Zellenszenarien behandelt. Ich habe keinen Weg gefunden, es zu brechen.

{=RIGHT(TRIM(A1),LEN(TRIM(A1))-MAX(IF(MID(TRIM(A1),ROW($1:$999),1)=" ",ROW($1:$999),0)))}
2
gabrielu

Um Jerry und Joe Antworten hinzuzufügen, wenn Sie den Text VOR dem letzten Wort finden möchten, können Sie Folgendes verwenden:

=TRIM(LEFT(SUBSTITUTE(TRIM(A1), " ", REPT(" ", LEN(TRIM(A1)))), LEN(SUBSTITUTE(TRIM(A1), " ", REPT(" ", LEN(TRIM(A1)))))-LEN(TRIM(A1))))

Mit "Meine kleine Katze" in A1 würde "Meine kleine Katze" (wo Joe und Jerry's "Katze" geben würden)

Auf die gleiche Weise, wie Jerry und Joe das letzte Wort isolieren, wird alles auf der linken Seite (dann schneidet es zurück)

2
Andrew B
=RIGHT(TRIM(A1),LEN(TRIM(A1))-FIND(CHAR(7),SUBSTITUTE(" "&TRIM(A1)," ",CHAR(7),
LEN(TRIM(A1))-LEN(SUBSTITUTE(" "&TRIM(A1)," ",""))+1))+1)

Das ist sehr robust - es funktioniert für Sätze ohne Leerzeichen, führende/nachgestellte Leerzeichen, mehrere Leerzeichen, mehrere führende/nachgestellte Leerzeichen ... und ich verwendete char (7) als Trennzeichen anstelle des vertikalen Strichs "|" nur für den Fall, dass dies ein gewünschter Text ist.

2
Mark Main
=RIGHT(A1,LEN(A1)-FIND("`*`",SUBSTITUTE(A1," ","`*`",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))) 
2
Brad
=LEFT(A1,FIND(IF(
 ISERROR(
  FIND("_",A1)
 ),A1,RIGHT(A1,
  LEN(A1)-FIND("~",
   SUBSTITUTE(A1,"_","~",
    LEN(A1)-LEN(SUBSTITUTE(A1,"_",""))
   )
  )
 )
),A1,1)-2)
1
J.B.

Stellen Sie sich vor, die Zeichenfolge könnte umgekehrt werden. Dann ist es ganz einfach. Anstatt an der Zeichenfolge zu arbeiten:

"My little cat" (1)

du arbeitest mit

"tac elttil yM" (2)

Mit =LEFT(A1;FIND(" ";A1)-1) in A2 erhalten Sie "My" mit (1) und "tac" mit (2), was "cat", dem letzten Wort in (1), umgekehrt ist.

Es gibt ein paar VBAs, um eine Zeichenfolge umzukehren. Ich bevorzuge die öffentliche VBA-Funktion ReverseString .

Installieren Sie das Obige wie beschrieben. Dann mit Ihrer Zeichenfolge in A1, z. B. "My little cat" und dieser Funktion in A2:

=ReverseString(LEFT(ReverseString(A1);IF(ISERROR(FIND(" ";A1));
  LEN(A1);(FIND(" ";ReverseString(A1))-1))))

sie sehen "cat" in A2.

Bei der obigen Methode wird davon ausgegangen, dass Wörter durch Leerzeichen getrennt sind. Die IF-Klausel gilt für Zellen mit Einzelwörtern = keine Leerzeichen in der Zelle. Hinweis: TRIM und CLEAN die ursprüngliche Zeichenfolge sind ebenfalls nützlich. Im Prinzip wird die gesamte Zeichenfolge von A1 umgekehrt und es wird einfach das erste Leerzeichen in der umgekehrten Zeichenfolge gefunden, das neben dem letzten (umgekehrten) Wort (d. H. "tac ") liegt. LEFT wählt dieses Wort aus und eine andere Zeichenkettenumkehrung stellt die ursprüngliche Reihenfolge des Wortes (" cat") wieder her. Der -1 am Ende der FIND-Anweisung entfernt das Leerzeichen.

Die Idee ist, dass es leicht ist, das erste (!) Wort in einer Zeichenfolge zu extrahieren, wobei LEFT und FIND das erste Leerzeichen enthalten. Für das letzte (!) Wort ist jedoch die RIGHT-Funktion die falsche Wahl, wenn Sie dies versuchen, da FIND leider kein Flag für die Richtung hat, in die Sie Ihre Zeichenfolge analysieren möchten.

Daher wird die gesamte Zeichenfolge einfach umgekehrt. LEFT und FIND funktionieren normal, der extrahierte String ist jedoch umgekehrt. Aber es ist keine große Sache, wenn man weiß, wie man eine Saite umkehrt. Die erste ReverseString-Anweisung in der Formel führt diesen Job aus.

1
Ralf

Ich habe ins PT-BR übersetzt, da ich das auch brauchte.

(Bitte beachten Sie, dass ich den Speicherplatz in \ geändert habe, da nur der Dateiname von Pfadzeichenfolgen benötigt wurde.)

=SE(ÉERRO(PROCURAR("\",A1)),A1,DIREITA(A1,NÚM.CARACT(A1)-PROCURAR("|", SUBSTITUIR(A1,"\","|",NÚM.CARACT(A1)-NÚM.CARACT(SUBSTITUIR(A1,"\",""))))))
0
Marcelo

In eine Spalte kopieren, diese Spalte auswählen und HOME> Bearbeiten> Suchen & Auswählen, Ersetzen:

Find what:

Replace All.

Nach dem Sternchen befindet sich ein Leerzeichen.

0
pnuts

Ein anderer Weg, dies zu erreichen, ist wie folgt

=IF(ISERROR(TRIM(MID(TRIM(D14),SEARCH("|",SUBSTITUTE(TRIM(D14)," ","|",LEN(TRIM(D14))-LEN(SUBSTITUTE(TRIM(D14)," ","")))),LEN(TRIM(D14))))),TRIM(D14),TRIM(MID(TRIM(D14),SEARCH("|",SUBSTITUTE(TRIM(D14)," ","|",LEN(TRIM(D14))-LEN(SUBSTITUTE(TRIM(D14)," ","")))),LEN(TRIM(D14)))))

 enter image description here