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関数を使用します。
ご回答いただいた @AndrewColeson さん、ありがとうございました。
なので、補足しておくと、-の右側に全てを入れたい場合は、次のコードを使います。
=MID(A1,LEN(B1)+3,LEN(A1))
つまり:
A1 = ABC - DEF
B1 = =MID(A1,1,FIND(" - ",A1,1))
B1 = ABC
Therefore A1 = DEF
このコードは-の後に未定義の文字数がある場合に最適です。
例えば
以下のようになります。
ABC - DEFG
AB - CDEFGH
...
次の式は、[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]),)