1. ホーム
  2. excel

[解決済み] VBAを使わずにExcelで文字列の逆引き検索を行うには?

2022-04-21 13:09:22

質問

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

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

  あなたは人間に分類されますか?->人間ですか?
いいえ、私は肉アイスキャンディーです ->アイスキャンディー
                  アジズ!ライト!->ライト!

解決方法は?

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

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

もし元の文字列がパイプ "|"文字を含む可能性があるなら、上記の両方を、ソースに現れない他の文字に置き換えてください。(ブラッドのオリジナルは、印刷不可能な文字が翻訳の際に削除されたため、壊れてしまったのだと思います)。

オマケ:仕組み(右から左へ)。

LEN(A1)-LEN(SUBSTITUTE(A1," ","")) - 元の文字列に含まれるスペースの数

SUBSTITUTE(A1," ","|", ... ) - だけを置き換えます。 最終 のスペースに |

FIND("|", ... ) - 置き換えられたその絶対位置を検索する | (それは最終的なスペースだった)

Right(A1,LEN(A1) - ... )) - それ以降のすべての文字を返します |

EDITです。 を追加して、ソーステキストにスペースが含まれない場合を考慮し、式の先頭に以下を追加します。

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