Frage

Ich habe eine Excel-Tabelle eine Liste von Strings enthält. Jeder String besteht aus mehreren Wörtern besteht, aber die Anzahl der Wörter in jeder Kette ist anders.

Unter Verwendung von Excel-Funktionen (kein VBA) gebaut, ist es eine Möglichkeit, das letzte Wort in jeder Kette zu isolieren?

Beispiele:

  Are you classified as human? -> human?
Negative, I am a meat popsicle -> popsicle
                  Aziz! Light! -> Light!
War es hilfreich?

Lösung

Dieses getestet und funktioniert (basierend auf Brads original post):

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

Wenn Ihre Original-Zeichenkette ein Rohr enthalten könnten „|“ Charakter, beide dann mit einem anderen Charakter in der oben ersetzen, die in Ihrer Quelle nicht angezeigt. (Ich vermute, dass Brads Original gebrochen wurde, weil ein nicht druckbare Zeichen in der Übersetzung entfernt wurde).

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

LEN(A1)-LEN(SUBSTITUTE(A1," ","")) - Anzahl der Räume in der ursprünglichen Zeichenfolge
SUBSTITUTE(A1," ","|", ... ) - Ersetzt nur den letzte Raum mit einem |
FIND("|", ... ) - Findet die absolute Position dieser ersetzt | (das war der letzte Raum)
Right(A1,LEN(A1) - ... )) - Liefert alle Zeichen nach dem |

EDIT: berücksichtigen für den Fall, dass der Ausgangstext keine Leerzeichen enthält, fügen Sie den folgenden zu Beginn der Formel:

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

macht die gesamte Formel jetzt:

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

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

Wenn die ursprüngliche Zeichenfolge ein Leerzeichen an der letzten Position enthalten könnte eine Trimm-Funktion hinzufügen, während alle Räume zählen: Herstellung der die Funktion der folgende:

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

Andere Tipps

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, nur von rechts nach links ändern

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

Auch ersetzen A1 durch die Zelle den Text.

Eine robustere Version von Jerry Antwort:

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

Das funktioniert unabhängig von der Länge der Saite, führende oder nachfolgende Leerzeichen, oder was auch immer, und es ist immer noch ziemlich kurz und einfach.

Ich fand diese auf google, getestet in Excel 2003 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)

[Bearbeiten] Ich habe nicht genug rep zu kommentieren, so scheint dies der beste Ort, ... BradC Antwort auch mit nicht funktioniert Leerzeichen oder leere Zellen ...
[2. Bearbeiten] tatsächlich, es nicht für einzelne Wörter arbeiten entweder ...

=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, Vorder- / Hinterräume, mehrere Räume, mehrere führende / nachfolgende Leerzeichen ... und ich char (7) für das Trennzeichen anstelle der vertikalen Strich „| " nur für den Fall, dass ein gewünschtes Textelement.

Das 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 ist Fehler nicht Falle ohne Leerzeichen oder ein Wort, aber das ist einfach hinzuzufügen.

Bearbeiten
Diese Griffe Leerzeichen, einzelnes Wort, und leere Zelle Szenarien. Ich habe nicht einen Weg zu brechen gefunden.

{=RIGHT(TRIM(A1),LEN(TRIM(A1))-MAX(IF(MID(TRIM(A1),ROW($1:$999),1)=" ",ROW($1:$999),0)))}
=RIGHT(A1,LEN(A1)-FIND("`*`",SUBSTITUTE(A1," ","`*`",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))) 

Jerry und Joe Antworten hinzuzufügen, wenn Sie den Text vor dem letzten Wort finden wollen, sind Sie verwenden können:

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

Mit ‚Meine kleinen Katze‘ in A1 würde zu ‚Mein kleinen‘ (wo Joe und Jerry würde ‚Katze‘

In der gleichen Weise, dass Jerry und Joe das letzte Wort zu isolieren, diese dann bekommt einfach alles links von der (dann trimmt es zurück)

Stellen Sie die Zeichenfolge rückgängig gemacht werden könnte. Dann ist es wirklich einfach. Statt die Arbeit an der Zeichenfolge:

"My little cat" (1)

Sie arbeiten mit

"tac elttil yM" (2)

Mit =LEFT(A1;FIND(" ";A1)-1) in A2 Sie erhalten "My" mit (1) und "tac" mit (2), die umgekehrt "cat" wird, das letzte Wort in (1).

Es gibt ein paar VBAs um einen String zu umkehren. Ich ziehe die öffentliche VBA-Funktion ReverseString .

Installieren Sie das, wie oben beschrieben. Dann mit der Zeichenfolge in A1, beispielsweise "My little cat" und diese Funktion in A2:

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

Sie werden sehen, "cat" in A2.

Das obige Verfahren geht davon aus, dass Wörter durch Leerzeichen getrennt sind. Die IF Klausel ist für Zellen, die einzelne Wörter = keine Leerzeichen in der Zelle. Hinweis: TRIM und CLEAN die ursprüngliche Zeichenfolge ist auch nützlich. Grundsätzlich kehrt er die ganze Reihe von A1 und findet einfach den ersten Rohling in der umgekehrten Zeichenfolge, die bis zum letzten (umgekehrt) Wort nächsten ist (das heißt, "tac "). LEFT nimmt dieses Wort und eine andere Zeichenfolge Umkehr rekonstituiert die ursprüngliche Reihenfolge des Wortes (" cat"). Die -1 am Ende der FIND Anweisung entfernt den Rohling.

Die Idee ist, dass es einfach ist, das erste (!) Wort in einem String mit LEFT und FINDing den ersten Rohling zu extrahieren. Doch für das letzte (!) Wort der RIGHT Funktion ist die falsche Wahl, wenn Sie versuchen, das zu tun, weil leider FIND nicht über eine Flagge für die gewünschte Richtung der Zeichenfolge zu analysieren.

Deshalb ist die ganze Reihe einfach umgekehrt. LEFT und FIND Arbeit als normal, aber die extrahierte Zeichenfolge umgekehrt wird. Aber sein ist keine große Sache, wenn Sie wissen, wie eine Zeichenfolge umkehren. Die erste ReverseString Anweisung in der Formel übernimmt diese Aufgabe.

=LEFT(A1,FIND(IF(
 ISERROR(
  FIND("_",A1)
 ),A1,RIGHT(A1,
  LEN(A1)-FIND("~",
   SUBSTITUTE(A1,"_","~",
    LEN(A1)-LEN(SUBSTITUTE(A1,"_",""))
   )
  )
 )
),A1,1)-2)

Kopieren in eine Spalte, wählen Sie die Spalte und HOME> Bearbeiten> Suchen und Auswählen, Ersetzen:

Alle ersetzen .

Es gibt einen Raum hinter dem Stern.

übersetzte ich PT-BR, wie ich dies auch erforderlich ist.

(Bitte beachten Sie, dass ich den Raum verändert habe \, weil ich die Dateinamen benötigen nur von Pfadzeichenfolgen.)

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

Eine andere Möglichkeit, dies zu erreichen ist, wie unten

=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)))))

Ich habe auch eine Aufgabe wie diese, und als ich fertig war, das obige Verfahren verwendet wird, eine neue Methode aufgetreten zu mir: Warum nicht Sie dies tun:

  1. Kehren Sie die Zeichenfolge ( "string eins" wird "eno gnirts").
  2. Mit der guten alten Suche (die von links nach rechts fest codierten ist).
  3. Umkehr es in lesbare Zeichenfolge wieder.

Wie funktioniert dieses Geräusch?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top