Excelは文字列から部分文字列を抽出
私は文字列から可変長の部分文字列を抽出する方法を探しています。
私のセルは以下のようになります。
ABC - DEF
ABCDE - DEF
ABCD - ABC
私は-
文字で文字列を分割したいので、セルは次のようになります。
ABC
ABCDE
ABCD
これはVBScriptではなく、数式で行う必要があります。
EDIT
データセットには常に-
文字が含まれているとは限らないことがわかりました。
私は文字列から可変長の部分文字列を抽出する方法を探しています。
私のセルは以下のようになります。
ABC - DEF
ABCDE - DEF
ABCD - ABC
私は-
文字で文字列を分割したいので、セルは次のようになります。
ABC
ABCDE
ABCD
これはVBScriptではなく、数式で行う必要があります。
EDIT
データセットには常に-
文字が含まれているとは限らないことがわかりました。
この問題は2つのステップに分けることができます。
1.希望する分割文字(この場合は"-"
または" - "
)の文字列のインデックスを探します。
2. 元のテキストの先頭から分割インデックスまでのプレフィックス部分文字列を取得する。
FIND
と SEARCH
コマンドはそれぞれ、needle
の中の与えられた haystack
のインデックスを返します (FIND
は大文字と小文字を区別し、SEARCH
は大文字と小文字を区別せず、ワイルドカードを許可します)。このことを考えると、次のようになります。
FIND(search_text, source_cell, start_index)
または、この場合は以下のようになります。
FIND(" - ", A1, 1)
インデックスを取得したら、「分割」を行うために source_cell
という接頭辞が必要になります。MID
はまさにこれを行います。
MID(source_cell, start_index, num_characters)
両者を合わせると、次のようになります。
=MID(A1,1,FIND(" - ",A1,1))
となり、A1 のテキストが ABC - DEF
の場合は ABC
となります。
あなたの編集に基づいてAndrewの回答を拡張します: 分割する文字列を見つけるために、FIND
関数を使用しています。もしFIND
が与えられた文字列を見つけるのに失敗した場合、#VALUE?
エラーを返します。そのため、この値をチェックして代わりに代用値を使用する必要があります。
#VALUE
を含むエラー値をチェックするには、ISERROR
関数を使用します。
=ISERROR(FIND(" - ", A1, 1))
これは、FIND
関数がA1セル内の" - “文字列を見つけられなかった場合に真となります。そこで、どの値を使用するかを決定するためにこの値を使用します。
=IF(ISERROR(FIND(" - ", A1, 1)), A1, MID(A1, 1, FIND(" - ", A1, 1)))
つまり、findコマンドがエラーを返した場合は、変更されていないA1セルを使用することになります。そうでない場合は、Andrewが既に提供しているMID
関数を使用します。
次の式は、[TEXTCOLUMN_1]
から部分文字列を削除します。 例:-./thumb/hello.jpg
を thumb/hello.jpg
に変換したい場合は、次の式を使用します
=SUBSTITUTE([TEXTCOLUMN_1],LEFT([TEXTCOLUMN_1],[NUM_OF_CHARACTERS]),)
[TEXTCOLUMN_1]
= 変更したいカラム名[NUM_OF_CHARACTERS]
= 削除したい左側の文字数
右側から削除したい場合は、次の式を使用します
=SUBSTITUTE([TEXTCOLUMN_1],RIGHT([TEXTCOLUMN_1],[NUM_OF_CHARACTERS]),)