Q&A

回答の並べ替え:
投稿新規に質問を投稿する

セルの文字列を指定した文字で区切りたい

rider rider

2022-10-17 16:51

お世話になります。

セルに「ABC,DEF」のようにカンマやセル内改行文字で文字列が区切られている場合
これを「ABC」と「DEF」のように分割して取り出したいのですがどのようにすれば
実現できますでしょうか。

よろしくお願いいたします。

rider rider
日本コンピュータシステム様

いつもお世話になっております。

ご教示頂いた方法で無事に文字列分割をすることができました。ありがとうございました。

ポイントとしては、区切り文字は関数内に持たせずに、セルで指定することで流用性や保守性を高めるということですね。

困っていたので助かりました。CELFのマニュアルに記載されてもよいレベルの貴重なノウハウだと思います。

どうもありがとうございました。深謝いたします。
日本コンピュータシステム(CELFチーム) 日本コンピュータシステム(CELFチーム) パートナー
「serch」関数の部分は全てシート上にセットする方法をご説明しましたが、シート上のセルに(alt+enter)を入力しておき、カンマの部分と置換することで対応対応できると思います。
以下の例だと(alt+enter)をA6に入力した場合の式になります。
此方の方法のほうがスマートだと思いますのでご確認下さい。

=LEN(B1)-LEN(SUBSTITUTE(B1,A6,""))/LEN(A6)
=MID(B1,B3,SEARCH(A6,B1,B3)-B3)
=SEARCH(A6,B1,B3)+1
メールコンタクトをとる
日本コンピュータシステム(CELFチーム) 日本コンピュータシステム(CELFチーム) パートナー
Excelだとセル内の改行は「serch」関数の「","」を「char(10)」に置換すれば対応できるのですが、CELFは「char」が利用できないようですの、強引ではありますが、以下の様に式に直接改行を入れれば実現できるようです。

=MID(B1,B3,SEARCH("
",B1,B3)-B3)

但し、アクションセットに改行を利用できませんので、アクションセットに指定していた「serch」関数の部分は全てシート上にセットし、アクションセットはループ処理とセルへの値渡しをするだけの役割で設定します。

1枚目の画像の以下のセルに元々アクションセットに記載していた式を埋め込みます。

①ループ回数
=LEN(B1)-LEN(SUBSTITUTE(B1,"
",""))/LEN("
")

②抜き出し文字
=MID(B1,B3,SEARCH("
",B1,B3)-B3)

③次の開始文字位置
=SEARCH("
",B1,B3)+1

次に2枚目の画像の通り、シートに埋め込んだ式から出た値をセルにセットします。
私の環境ではこの方法で実現できましたのでご確認下さい。
メールコンタクトをとる
rider rider
日本コンピュータシステム様

いつも大変お世話になっております。

ご教示頂いた方法で無事に動作しました。ありがとうございました。

さて、カンマ区切り文字の場合は動作したのですが、下記のようにセル内で改行された場合は、区切り文字は何を指定すればよいのでしょうか。
ABC
DEFG
HIJKL

何度も申し訳ありませんがよろしくお願いいたします。
日本コンピュータシステム(CELFチーム) 日本コンピュータシステム(CELFチーム) パートナー
こんにちは。
恐らくですが、開始文字位置(B3)に初期値が設定されていないからだと思います。
シートのB3に「1」を入力するか、アクションセットの先頭でB3に「1」を設定するようにしてから起動してみて下さい。
メールコンタクトをとる
rider rider
日本コンピュータシステム様

いつも回答をありがとうございます。

ご教示いただいたアクションセットをそのまま作成したのですが
1枚目の画像の通り、#VALUE!となってしまいました。

ロジックを把握できていなくて申し訳ありませんがどこがいけないのか
教えていただけますでしょうか。

よろしくお願いいたします。
日本コンピュータシステム(CELFチーム) 日本コンピュータシステム(CELFチーム) パートナー
メダルベストアンサー
アクションセットを利用し動的に分割する方法を考えましたのでご参考下さい。
画像のアクションセットの通り繰り返しで分割する方法になります。
「①」はセルに含まれるカンマの数を取得します。
「②」は次のカンマまでの文字を抜き出しになります。
「③」は次の開始文字の位置を取得します。

①繰り返しの条件
=LEN(B1)-LEN(SUBSTITUTE(B1,",",""))/LEN(",")

②次のカンマまでの文字を抜き出す
=MID(B1,B3,SEARCH(",",B1,B3)-B3)

③次の開始位置
=SEARCH(",",B1,B3)+1
メールコンタクトをとる
日本コンピュータシステム(CELFチーム) 日本コンピュータシステム(CELFチーム) パートナー
こんにちは。
CELFはTEXTSPLIT関数が利用できないようですが、MID、SEARCH、LENを組み合わせることで対応ができると思います。
例えばA1に「ABC,DEF」が入力されている場合、以下のように関数を組み合わせることで抜き出しが可能だと思います。

=MID(A1,1,SEARCH("," A1)-1) ⇒ ABCを抜き出す
=MID(A1,SEARCH("," A1)+1,LEN(A1)) ⇒ DEFを抜き出す

また、入力内容が「ABC,DEF」や「ABC,DEF,GHI」の様に可変になる場合は、アクションセットでループし、上記の関数を応用すれば可変でも対応できると思いますのでご検討下さい。
メールコンタクトをとる