[[20150711012437]] 『文字列から、特定の文字を抜き出す』(aki) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『文字列から、特定の文字を抜き出す』(aki)

こんばんわ。宜しくお願いします。

 以下のような文字列があります。

 りんご
 1りんご
 1もも2すいか
 1メロン2ミカン3パイン
 1ナシ2パイナップル3グレープフルーツ4キウイ

この文字列を、各々

 りんご
 1りんご
 1もも 2すいか
 1メロン 2ミカン 3パイン
 1ナシ 2パイナップル 3グレープフルーツ 4キウイ
 とセルに各々分けたいのです。

 1行目
=IF(LEFT(A2)<>"1",A2,LEFT(A2,FIND("2",A2)-1))
 2行目
=IF(LEFT(A3)<>"1",A3,LEFT(A3,FIND("1",A3)-1))
 3行目
=IF(LEFT(A4)<>"1",A4,LEFT(A4,FIND("1",A4)-1))
     =SUBSTITUTE(A4,B4,"")
 と何とかなったのですが、
4行目から
2ミカン3パイン
2パイナップル3グレープフルーツ4キウイ
になってしまい、上手くいきません。
どなたかご教示頂けないでしょうか。
宜しくお願いします。

 < 使用 Excel:Excel2007、使用 OS:Windows7 > 2015/07/11 1:42 aki

 (1)
 2 を ,2 に置換するといった処理を何回か行って

 1りんご
 1もも,2すいか
 1メロン,2ミカン,3パイン
 1ナシ,2パイナップル,3グレープフルーツ,4キウイ

 に修正します。

 (2)
 次に、カンマを指定した「データ区切り」(データ のリボンにあります)の
 処理を使って、右方向のセルに展開すればどうでしょうか。

 もっと気が利いた方法があるかもしれませんが、
 考えているうちに実行したほうが早いかも。

(γ) 2015/07/11(土) 06:54


 数値は1、2、3、…と1刻みの昇順である物とする。

     A
 1 りんご
 2 1りんご
 3 1もも2すいか
 4 1メロン2ミカン3パイン
 5 1ナシ2パイナップル3グレープフルーツ4キウイ

 というレイアウトだとしてB1セルに

 =IFERROR(LEFT(A1,FIND("2",A1)-1),A1)
 と入力して下へコピー、C1セルに

 =IFERROR(REPLACE(LEFT($A1,FIND(COLUMN(C1),$A1)-1),1,SUM(LEN($B1:B1)),""),REPLACE($A1,1,SUM(LEN($B1:B1)),""))
 と入力してShiftキーとCtrlキーを押しながらEnterキーで式を確定(確定後、式が{}で囲まれればOK)
 右及び下へフィルコピー、でどうか?
(ねむねむ) 2015/07/11(土) 08:44

 追記
 レイアウトが異なる場合も「COLUMN(C1)」の部分はC列を指定する様にしてくれ。
(ねむねむ) 2015/07/11(土) 08:52

 同じことだけど。。。

 B1 =LEFT(A1,FIND(2,A1&2)-1)  下にコピー

 C1 =REPLACE(LEFT($A1,FIND(COLUMN(C1),$A1&COLUMN(C1))-1),1,SUMPRODUCT(LEN($B1:B1)),"")

 C1も通常通りEnterのみで確定し、右と下にコピー
 
 
 一つの式でやるなら(前提:元データの右隣の列から表示)

 B1 =REPLACE(LEFT($A1,FIND(COLUMN(B1),$A1&COLUMN(B1))-1),1,SUMPRODUCT(LEN($A1:A1))-LEN($A1),"")

 右と下にコピー

 元データや式を入れる列がどこであっても、COLUMNの引数をいじらないように。
(笑) 2015/07/12(日) 08:32

 配列数式なしで。

 B1 =IF(AND(LEFT($A1)<>"1",COLUMN(A1)=1),$A1,MID(REPLACE($A1,FIND(COLUMN(B1),$A1&COLUMN(B1)),1000,),FIND(COLUMN(A1),$A1&COLUMN(A1)),1000))

 範囲コピー。

 ※連番、昇順 前提。
 ※文字列数 1000は保険。
 
(GobGob) 2015/07/14(火) 09:42

御礼遅くなり申し訳ありません。

 γさま
    なるほどです。次回プログラムを作成する際には、記号を混ぜるようにします。

 ねむねむさま
    完璧にできました。ありがとうございます。
    数式については、ゆっくり解析したいと思います。

 笑さま
    完璧にできました。ありがとうございます。
    いろいろな考え方があるんですね。

 GobGobさま
    完璧にできました。ありがとうございます。
    ※連番、昇順 前提・・・全く問題ありません。前提通りです。
    ※文字列数 1000は保険。・・・全く問題ありません。1,000文字は行きませんので。

皆様貴重な時間を有難うございました。

(aki) 2015/07/15(水) 21:28


こんばんは
 ご教示頂きたく、まいりました。宜しくお願いします。
数字ではなく、文字になっても可能でしょうか

 りんご
Aりんご
AももBすいか
AメロンBミカンCパイン
AナシBパイナップルCグレープフルーツDキウイ

 宜しくお願いします。

(aki) 2015/08/19(水) 01:13


 半角のABC順で、最大「Z」まで。

 A1に元の文字列

 B1 =REPLACE(LEFT($A1,FIND(CHAR(65+COLUMN(A1)),$A1&CHAR(65+COLUMN(A1)))-1),1,SUMPRODUCT(LEN($A1:A1))-LEN($A1),"")

 右と下にフィルコピー

 元の文字列がA列でなくても、COLUMN(A1) を変更してはいけないことは
 前回と同じ。
(笑) 2015/08/19(水) 06:35

笑さま 返信・御礼が遅くなり申し訳ありません。

 CHAR関数
初めて知りました。
ばっちりです。いろいろなきごうが使えるんですね。
大変勉強になりました。
今後とも宜しくお願いします。
(aki) 2015/08/21(金) 22:33

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.