[[20230406002236]] 『そもそも無理なのか?』(無知の) ページの最後に飛ぶ

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

 

『そもそも無理なのか?』(無知の)

商品管理と報告書作成する上で、2枚のシートを使っています。
シートの名前を1枚目を【商品管理】、2枚目を【報告書】
とします。

1枚目のシートに商品管理で、以下のような管理表を作成しています。

    |りんご|みかん|ばなな
4月1日| 1 | 0 | 1 |
4月2日| 1 | 1 | 0 | 
4月3日| 1 | 0 | 0 |

2枚目のシートは報告書として、

4月1日 りんご、ばなな
4月2日 りんご、みかん
4月3日 りんご
と1枚目のシートで「1」と入力した商品のみ報告書に表示させたいのですが、どのような計算式をすればよいか全く不明です。 お手数で申し訳ありませんが教示ねがいます。

< 使用 Excel:Excel2016、使用 OS:Windows10 >


2016では一部バージョンでTEXTJOIN関数が使えるので
 =TEXTJOIN("、",TRUE,IF($B2:D2=1,$B$1:D$1,""))

みたいにできるかもしれません
(火災報知器) 2023/04/06(木) 00:38:19


[[20230405021600]] 『IFについて』(無知)
(ホント無知) 2023/04/06(木) 00:41:55

当然、既に回答もらっているTEXTJOIN関数を試した上で、再質問しているのですよね?
前スレの回答に対して、「出来た」「出来ない」の報告があって然るべきだと思いますが。
以下、TEXTJOIN関数が使えないと想定した回答です。

読点をどうしても打たなければならないという事でなければ、

    |[A]   |[B]   |[C]   |[D]   |[E]|[F]                                                         
 [1]|      |りんご|みかん|ばなな|   |                                                            
 [2]|4月1日|     1|     0|     1|   |=IF(B2=1,B$1&" ","")&IF(C2=1,C$1&" ","")&IF(D2=1,D$1&" ","")
 [3]|4月2日|     1|     1|     0|   |りんご みかん                                               
 [4]|4月3日|     1|     0|     0|   |りんご   

参照するシート名やセルの番地はそちらで合わせて下さい。

読点をどうしても打ちたいのなら、
「101」の時は「りんご、ばなな」、「100」の時は「りんご」
という様な組合せの対応表を用意して、
CONCAT(B2:D2)を検索値として、VLOOKUP等で参照する。
(外野) 2023/04/06(木) 06:23:47


 ●Sheet1
   A    B    C    D 
1    りんご みかん ばなな 
2 4/1    1    0    1 
3 4/2    1    1    0 
4 4/3    1    0    0 

 ●Sheet2
   A        B    C    D 
1 4/1 りんご、ばなな ばなな ばなな 
2 4/2 りんご、みかん みかん     
3 4/3     りんご         

 B1
=SUBSTITUTE(TRIM(REPT(Sheet1!B$1&" ",Sheet1!B2>0)&C1)," ","、")
下方向・↓右方向・→

 C列以降は非表示またはフォント白
   A        B 
1 4/1 りんご、ばなな 
2 4/2 りんご、みかん 
3 4/3     りんご 
(んなっと) 2023/04/06(木) 07:13:55

 これでもいいかも。
 B1
=IF(Sheet1!B2>0,Sheet1!B$1&IF(C1="","","、"),"")&C1
(んなっと) 2023/04/06(木) 07:24:54

 こんな具合?

 Sheet1
    |[A]   |[B]   |[C]   |[D]   
 [1]|      |りんご|みかん|ばなな
 [2]|4月1日|     1|     0|     1
 [3]|4月2日|     1|     1|     0
 [4]|4月3日|     1|     0|     0

 Sheet2
 C2=SUBSTITUTE(TRIM(REPT(Sheet1!$B$1&" ",Sheet1!B2)&REPT(Sheet1!$C$1&" ",Sheet1!C2)&REPT(Sheet1!$D$1,Sheet1!D2))," ",",")
    |[A]   |[B]          
 [1]|      |             
 [2]|4月1日|りんご,ばなな
 [3]|4月2日|りんご,みかん
 [4]|4月3日|りんご       

 外野さんCONCAT使えるならTEXTJOINも使えそうな気がする・・・
(稲葉) 2023/04/06(木) 08:31:43

>稲葉さん
ご指摘の通りです、、、失礼致しました。
私の回答は取り下げます。
(外野) 2023/04/06(木) 08:35:59

 いやいや取り下げまでは!!
 私も言われて初めて調べたので勉強になりました。
 むしろ新関数ってホント便利ですね。
 =TEXTJOIN(",",TRUE,IF(B2:D2=1,$B$1:$D$1,""))
 これとか
 =MID(REDUCE("",IF(B2:D2=1,$B$1:$D$1,""),LAMBDA(x,y,IF(y<>"",x&","&y,x))),2,100)
 これでできちゃうっていうのが今までと違いますよねー
(稲葉) 2023/04/06(木) 08:49:47

 時々こちらで勉強させていただいています。
 当方2019なのですが、永続ライセンス版のため
 TEXTJOINは使えますが、スピルはしません。
 そのため、(火災報知器)さん 2023/04/06(木) 00:38:19の
 >=TEXTJOIN("、",TRUE,IF($B2:D2=1,$B$1:D$1,""))でも
(稲葉)さんの
 >=TEXTJOIN(",",TRUE,IF(B2:D2=1,$B$1:$D$1,""))でも
[Ctrl]+[Shift]+[Enter]キーで配列数式として確定する必要がありました。
 ご質問内容通りなら
(稲葉)さんの 2023/04/06(木) 08:31:43
 >=SUBSTITUTE(TRIM(REPT(Sheet1!$B$1&" ",Sheet1!B2)&REPT(Sheet1!$C$1&" ",Sheet1!C2)&REPT(Sheet1!$D$1,Sheet1!D2))," ",",")
でできるのでは?

 ユーザ定義関数という方法もあるようですが
 h ttps://ramq-cat.com/textjoin-excel2013/
 TEXTJOIN関数の中に数式を入れたり、区切り文字の参照先をセル範囲にしたりと複雑なものには対応していないようです。
 新関数はスプレッドシートで検証したら使えました。

 ご参考まで。
(檸檬) 2023/04/09(日) 17:58:41

コメント返信:

[ 一覧(最新更新順) ]


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