文字列のリストを含む Excel スプレッドシートがあります。各文字列は複数の単語で構成されていますが、各文字列の単語数は異なります。
組み込みの Excel 関数 (VBA なし) を使用して、各文字列の最後の単語を分離する方法はありますか?
例:
人間に分類されますか?→人間? ネガティブ、私は肉のアイスキャンディーです -> アイスキャンディー アジズ!光!->ライト!
文字列のリストを含む Excel スプレッドシートがあります。各文字列は複数の単語で構成されていますが、各文字列の単語数は異なります。
組み込みの Excel 関数 (VBA なし) を使用して、各文字列の最後の単語を分離する方法はありますか?
例:
人間に分類されますか?→人間? ネガティブ、私は肉のアイスキャンディーです -> アイスキャンディー アジズ!光!->ライト!
これはテスト済みで、動作します (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," ",""))))))
これは、私が使用して大成功を収めたテクニックです。
=TRIM(RIGHT(SUBSTITUTE(A1, " ", REPT(" ", 100)), 100))
文字列の最初の単語を取得するには、RIGHT から LEFT に変更するだけです
=TRIM(LEFT(SUBSTITUTE(A1, " ", REPT(" ", 100)), 100))
また、A1 をテキストを保持するセルに置き換えます。
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回目の編集]実際には機能しません一言でも…
=RIGHT(A1,LEN(A1)-FIND("`*`",SUBSTITUTE(A1," ","`*`",LEN(A1)-LEN(SUBSTITUTE(A1," ","")))))
これは非常にクリーンでコンパクトで、うまく機能します。
{=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)))}
=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) を使用しました それが必要なテキスト項目である場合に備えて。
=LEFT(A1,FIND(IF(
ISERROR(
FIND("_",A1)
),A1,RIGHT(A1,
LEN(A1)-FIND("~",
SUBSTITUTE(A1,"_","~",
LEN(A1)-LEN(SUBSTITUTE(A1,"_",""))
)
)
)
),A1,1)-2)
文字列が逆になる可能性があると想像してください。それならとても簡単です。文字列で作業する代わりに:
"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
句は、単一の単語を含むセル用です = セルに空白はありません。注:元TRIM
のCLEAN
文字列も同様に役立ちます。原則として、A1 から文字列全体を反転し、最後の (反転された) 単語 (つまり、"tac "
) の隣にある反転された文字列の最初の空白を単純に見つけます。LEFT
はこの単語を選択し、別の文字列反転により単語の元の順序を再構成します ( " cat"
)。ステートメントの-1
最後の はFIND
空白を削除します。
アイデアは、文字列内の最初の (!) 単語を簡単に抽出し、最初の空白LEFT
をing することです。FIND
ただし、最後の (!) 単語についてRIGHT
は、残念ながら FIND には文字列を分析する方向のフラグがないため、それを実行しようとすると関数は間違った選択になります。
したがって、文字列全体が単純に逆になります。LEFT
通常どおり動作しFIND
ますが、抽出された文字列が逆になります。しかし、弦を逆にする方法を知っていれば、彼は大したことではありません。式の最初のReverseString
ステートメントがこの役割を果たします。
これも必要だったので、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,"\",""))))))
これを達成する別の方法は以下の通りです
=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)))))
私もこのようなタスクを持っていました、そして私が終わったとき、上記の方法を使って、新しい方法が私に起こりました:なぜあなたはこれをしませんか:
これはどのように聞こえますか?