文字列のリストを含む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))
文字列の最初の単語を取得するには、右から左に変更します
=TRIM(LEFT(SUBSTITUTE(A1, " ", REPT(" ", 100)), 100))
また、A1をテキストを保持するセルに置き換えます。
" "
はうまくいきます-最初のものを私の区切り文字で置き換えました。2つ100
のsは、私が誤っていない限り、100文字の文字列に制限するようです
=TRIM(SUBSTITUTE(RIGHT(SUBSTITUTE(A1, ".", REPT(".", 100)), 100), ".", ""))
ジェリーの答えのより堅牢なバージョン:
=TRIM(RIGHT(SUBSTITUTE(TRIM(A1), " ", REPT(" ", LEN(TRIM(A1)))), LEN(TRIM(A1))))
これは、文字列の長さ、先頭または末尾のスペースなどに関係なく機能しますが、それでもかなり短くてシンプルです。
=TRIM(RIGHT(SUBSTITUTE(TRIM(A1), ".", REPT(" ", LEN(TRIM(A1)))), LEN(TRIM(A1))))
ファイル拡張子を取得しました。
SUBSTITUTE
、スペースだけでなく、どの文字でも機能するようにします。=TRIM(SUBSTITUTE(RIGHT(SUBSTITUTE(TRIM(A1),"/",REPT("/",LEN(TRIM(A1)))),LEN(TRIM(A1))),"/",""))
ここで、「/」は区切り文字です。
" ; "
スペースで囲まれたセミコロン)入力値:"Technology Sprint 24 ; Sprint 4"
を返します"; Sprint 4"
。私は、@ PProteusによって適応されたソリューションを使用しています。
TRIM(A1)
を次のように置き換えて、TRIM(SUBSTITUTE(A1, "strDelimeter", ";"))
すべての場所で、新しい文字区切り文字を取得するか、 ";"
またはchar()
関数を使用して検索する本当に予想外のキャラクター。
TRIM
2番目SUBSTITUTE
を追加した後、関数は必要ありません。式には、この部分を排除し、予想される結果を提供します:=SUBSTITUTE(RIGHT(SUBSTITUTE(TRIM(A1),";",REPT(";",LEN(TRIM(A1)))),LEN(TRIM(A1))),";","")
私はこれをグーグルで見つけ、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(TRIM(A1),LEN(TRIM(A1))-FIND(CHAR(7),SUBSTITUTE(" "&TRIM(A1)," ",CHAR(7),
LEN(TRIM(A1))-LEN(SUBSTITUTE(" "&TRIM(A1)," ",""))+1))+1)
これは非常に堅牢です。スペースなし、先頭/末尾のスペース、複数のスペース、複数の先頭/末尾のスペースがある文で機能します。区切り文字には、縦棒 "|"ではなくchar(7)を使用しました。それが望ましいテキスト項目である場合に備えて。
これは非常にクリーンでコンパクトで、うまく機能します。
{=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(A1,LEN(A1)-FIND("`*`",SUBSTITUTE(A1," ","`*`",LEN(A1)-LEN(SUBSTITUTE(A1," ","")))))
ジェリーとジョーの回答に追加するには、使用できる最後の単語の前にテキストを検索したい場合:
=TRIM(LEFT(SUBSTITUTE(TRIM(A1), " ", REPT(" ", LEN(TRIM(A1)))), LEN(SUBSTITUTE(TRIM(A1), " ", REPT(" ", LEN(TRIM(A1)))))-LEN(TRIM(A1))))
A1の「私の小さな猫」では、「私の小さな」になります(ジョーとジェリーが「猫」を与える場所)
JerryとJoeが最後の単語を分離するのと同じように、これはそのすべてをその左側に配置します(次に、それをトリミングして戻します)。
文字列を逆にできると想像してください。その後、それは本当に簡単です。文字列に取り組む代わりに:
"My little cat" (1)
あなたは一緒に働きます
"tac elttil yM" (2)
=LEFT(A1;FIND(" ";A1)-1)
A2 では、"My"
(1)と(1)の最後の単語で"tac"
ある(2)が逆"cat"
になります。
文字列を逆にするためのVBAがいくつかあります。私はパブリックVBA関数を好みます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
とFIND
最初のブランクをする。ただし、RIGHT
残念なことに、FINDには文字列を分析する方向のフラグがないため、last(!)ワードの場合、関数を選択しようとすると関数が間違った選択になります。
したがって、文字列全体が単純に逆になります。LEFT
そしてFIND
通常通りの作業が、抽出された文字列が反転しています。しかし、文字列を逆にする方法を知っていれば、彼は大したことではありません。ReverseString
式の最初のステートメントがこの仕事をします。
これを達成する別の方法は以下の通りです
=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)))))
私もこのようなタスクを持っていました、そして私が終わったときに、上記の方法を使用して、新しい方法が私に起こりました:なぜあなたはこれをしませんか:
この音はどうですか?