178

文字列のリストを含む Excel スプレッドシートがあります。各文字列は複数の単語で構成されていますが、各文字列の単語数は異なります。

組み込みの Excel 関数 (VBA なし) を使用して、各文字列の最後の単語を分離する方法はありますか?

例:

  人間に分類されますか?→人間?
ネガティブ、私は肉のアイスキャンディーです -> アイスキャンディー
                  アジズ!光!->ライト!
4

15 に答える 15

224

これはテスト済みで、動作します (Brad の元の投稿に基づく):

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

元の文字列にパイプ「|」が含まれる場合 上記の両方を、ソースに表示されない他の文字に置き換えます。(印刷できない文字が翻訳で削除されたため、ブラッドのオリジナルは壊れていると思われます)。

おまけ: 仕組み (右から左へ):

LEN(A1)-LEN(SUBSTITUTE(A1," ",""))– 元の文字列のスペースの数–最後のスペース
SUBSTITUTE(A1," ","|", ... )だけを a に置き換えます – 置き換えられた(最後のスペースであった)絶対位置を見つけます – その後のすべての文字を返します|
FIND("|", ... )|
Right(A1,LEN(A1) - ... ))|

編集:ソース テキストにスペースが含まれていない場合を考慮して、式の先頭に次を追加します。

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

式全体を作成します。

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

=IF(COUNTIF(A1,"* *")または、他のバージョンの構文を使用できます。

元の文字列の最後の位置にスペースが含まれている可能性がある場合は、すべてのスペースをカウントしながらトリム関数を追加します。関数を次のようにします。

=IF(ISERROR(FIND(" ",B2)),B2, RIGHT(B2,LEN(B2) - FIND("|",
    SUBSTITUTE(B2," ","|",LEN(TRIM(B2))-LEN(SUBSTITUTE(B2," ",""))))))
于 2008-12-08T18:27:04.290 に答える
90

これは、私が使用して大成功を収めたテクニックです。

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

文字列の最初の単語を取得するには、RIGHT から LEFT に変更するだけです

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

また、A1 をテキストを保持するセルに置き換えます。

于 2012-03-02T01:31:54.400 に答える
13

Googleでこれを見つけ、Excel 2003でテストしましたが、うまくいきます:

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

[編集]コメントするのに十分な担当者がいないので、これが最適な場所のようです...BradCの答えは、末尾のスペースや空のセルでも機能しません...
[2回目の編集]実際には機能しません一言でも…

于 2008-12-08T18:12:41.497 に答える
3
=RIGHT(A1,LEN(A1)-FIND("`*`",SUBSTITUTE(A1," ","`*`",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))) 
于 2008-12-08T17:52:00.993 に答える
3

これは非常にクリーンでコンパクトで、うまく機能します。

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

スペースや 1 つの単語がない場合はエラー トラップは発生しませんが、簡単に追加できます。

編集:
これは、末尾のスペース、単一の単語、および空のセルのシナリオを処理します。私はそれを壊す方法を見つけていません。

{=RIGHT(TRIM(A1),LEN(TRIM(A1))-MAX(IF(MID(TRIM(A1),ROW($1:$999),1)=" ",ROW($1:$999),0)))}
于 2010-10-27T01:00:36.230 に答える
3
=RIGHT(TRIM(A1),LEN(TRIM(A1))-FIND(CHAR(7),SUBSTITUTE(" "&TRIM(A1)," ",CHAR(7),
LEN(TRIM(A1))-LEN(SUBSTITUTE(" "&TRIM(A1)," ",""))+1))+1)

これは非常に堅牢です。スペースのない文、先頭/末尾のスペース、複数のスペース、複数の先頭/末尾のスペースで機能します...そして、縦棒 "|" ではなく区切り文字に char(7) を使用しました それが必要なテキスト項目である場合に備えて。

于 2011-05-13T13:41:20.330 に答える
1
=LEFT(A1,FIND(IF(
 ISERROR(
  FIND("_",A1)
 ),A1,RIGHT(A1,
  LEN(A1)-FIND("~",
   SUBSTITUTE(A1,"_","~",
    LEN(A1)-LEN(SUBSTITUTE(A1,"_",""))
   )
  )
 )
),A1,1)-2)
于 2016-07-01T12:33:17.453 に答える
1

文字列が逆になる可能性があると想像してください。それならとても簡単です。文字列で作業する代わりに:

"My little cat" (1)

あなたは一緒に働きます

"tac elttil yM" (2)

=LEFT(A1;FIND(" ";A1)-1)A2"My"で (1) と"tac"(2) を使用すると、逆"cat"になり、(1) の最後の単語が得られます。

文字列を逆にするための VBA がいくつかあります。私は public VBA function を好みますReverseString

上記のようにインストールします。次に、文字列を A1 に、たとえば、"My little cat"この関数を A2 に:

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

"cat"A2でわかります。

上記の方法は、単語が空白で区切られていることを前提としています。このIF句は、単一の単語を含むセル用です = セルに空白はありません。注:元TRIMCLEAN文字列も同様に役立ちます。原則として、A1 から文字列全体を反転し、最後の (反転された) 単語 (つまり、"tac ") の隣にある反転された文字列の最初の空白を単純に見つけます。LEFTはこの単語を選択し、別の文字列反転により単語の元の順序を再構成します ( " cat")。ステートメントの-1最後の はFIND空白を削除します。

アイデアは、文字列内の最初の (!) 単語を簡単に抽出し、最初の空白LEFTをing することです。FINDただし、最後の (!) 単語についてRIGHTは、残念ながら FIND には文字列を分析する方向のフラグがないため、それを実行しようとすると関数は間違った選択になります。

したがって、文字列全体が単純に逆になります。LEFT通常どおり動作しFINDますが、抽出された文字列が逆になります。しかし、弦を逆にする方法を知っていれば、彼は大したことではありません。式の最初のReverseStringステートメントがこの役割を果たします。

于 2011-01-21T14:00:37.993 に答える
0

これも必要だったので、PT-BRに翻訳しました。

\(パス文字列のみのファイル名が必要だったため、スペースを に変更したことに注意してください。)

=SE(ÉERRO(PROCURAR("\",A1)),A1,DIREITA(A1,NÚM.CARACT(A1)-PROCURAR("|", SUBSTITUIR(A1,"\","|",NÚM.CARACT(A1)-NÚM.CARACT(SUBSTITUIR(A1,"\",""))))))
于 2009-08-21T18:29:10.637 に答える
0

これを達成する別の方法は以下の通りです

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

ここに画像の説明を入力

于 2016-07-13T09:35:13.577 に答える
-1

私もこのようなタスクを持っていました、そして私が終わったとき、上記の方法を使って、新しい方法が私に起こりました:なぜあなたはこれをしませんか:

  1. 文字列を逆にします(「文字列1」は「enognirts」になります)。
  2. 古き良き検索(左から右にハードコードされている)を使用します。
  3. 再び読み取り可能な文字列に戻します。

これはどのように聞こえますか?

于 2012-10-18T17:38:11.187 に答える