ID非公開

2021/12/1 0:06

33回答

2021/11/22付け質問に続く相談です。

画像
補足

皆様ありがとうございました。お三方のご提示くださいましたやり方をすべて試しました。どちら様のやり方もきちんと動きました。 カンマで区切られた領域が3個以上ある場合は、VBAが便利ですね。

Excel | Office系ソフトウェア165閲覧xmlns="http://www.w3.org/2000/svg">500

ベストアンサー

2

2人がナイス!しています

この返信は削除されました

ThanksImg質問者からのお礼コメント

皆様ありがとうございました。VBAが一番簡単につかえました。領域が3つ以上でも問題なく使えました。 これを機会にVBAを覚えたいと思いました。

お礼日時:2021/12/2 20:33

その他の回答(2件)

1

ID非公開

2021/12/1 21:58

あなたのエクセルがCONCAT関数が使える前提です 添付画像参照 G3: =IFERROR(TRIM(CONCAT(INDEX(TEXT((LEFT(TRIM(MID(SUBSTITUTE($B3,",",REPT(" ",50)),COLUMN(A1)*50-49,50)),2)*1<=ROW(U$1:U$100))*(RIGHT(TRIM(MID(SUBSTITUTE($B3,",",REPT(" ",50)),COLUMN(A1)*50-49,50)),2)*1>=ROW(U$1:U$100))*(ROW(U$1:U$100)),"00;;;")&" ",))),"") 右と下にドラッグコピー C3: =SUBSTITUTE(TRIM(CONCAT(INDEX(G3:L3&" ",)))," ",",") 下にドラッグコピー B列のようなパターンも考えるとTEXTJOINかCONCAT関数が使えないと厳しいと思います そのときは lgk********さん のVBAを使ったユーザー定義関数が一番手っ取り早いかと思います

画像

1人がナイス!しています

ID非公開

質問者2021/12/2 20:30

ありがとうございました。この関数も使えました。VBAが使える場合はVBAが便利ですね。

1

B3セルから下方にお示しのようなデータが有るとして作業列を作って対応します。 G3セルには次の式を入力して横方向にドラッグコピーしたのちに下方にもドラッグコピーします。 =IF($B3="","",IF(ISERROR(FIND(",",$B3)),IF(LEFT($B3,2)+COLUMN(A1)-1>RIGHT($B3,2)*1,"",IF(F3="",TEXT(LEFT($B3,2)*1+COLUMN(A1)-1,"00"),F3&","&TEXT(LEFT($B3,2)*1+COLUMN(A1)-1,"00"))),IF(FIND("-",$B3)<FIND(",",$B3),IF(LEFT($B3,2)+COLUMN(A1)-1<=MID($B3,4,2)*1,IF(F3="",TEXT(LEFT($B3,2)*1+COLUMN(A1)-1,"00"),F3&","&TEXT(LEFT($B3,2)*1+COLUMN(A1)-1,"00")),IF(LEFT($B3,2)+COLUMN(A1)-1=MID($B3,4,2)*1+1,F3&","&RIGHT($B3,2),"")),IF(FIND("-",$B3)>FIND(",",$B3),IF(COLUMN(A1)=1,LEFT($B3,2),IF((MID($B3,4,2)*1+COLUMN(A1)-2)*1<=MID($B3,7,2)*1,F3&","&TEXT(MID($B3,4,2)*1+COLUMN(A1)-2,"00"),"")),"")))) お求めのD3セルには次の式を入力して下方にドラッグコピーすればよいでしょう。 =IF(B3="","",INDEX(G3:P3,COUNTIF(G3:P3,"*?"))) なお、作業列が目障りでしたらそれらの列を選択して「非表示」にすればよいでしょう。

1人がナイス!しています

ID非公開

質問者2021/12/2 20:28

複雑な関数をありがとうございます。きちんと動きました。