データの分析、グラフ作成、および通信のためのツールを備えた Microsoft 表計算ソフトウェアのファミリ。
こんにちは。
ご希望のことを行うには、VBA を使っても関数を使っても良いかと思いますが、ここでは、関数を使った方法をご紹介します。
まず、「表2」に使える関数についてですが、Microsoft365( Office365 )の Excel をお使いのようなので、TEXTJOIN 関数がピッタリかと思います。(「スピル」も使えますので。)
・TEXTJOIN 関数
図1の「表2」と図2の「表3」は、提示されている表にこの関数を使った数式を当てはめてみた結果です。
手元の環境( Excel2016 )では「スピル」や TEXTJOIN 関数が使えませんので Web版の Excel で動作確認しています。
・図1
<「表2」の数式>
- O3セルの数式
=IF($A3="","",$A3) - P3セルの数式
=TEXTJOIN("・",1,IF($B3:$F3=1,$B$2:$F$2,"")) - X3セルの数式
=TEXTJOIN("・",1,IF($G3:$I3=1,$G$2:$I$2,""))
※いずれの数式も、入力後(あるいはコピー・貼り付け後)に必要なだけ下方向(行方向)にコピーして完了です。
※コピーする行数は多めのほうが良いかと思います。図1では、見えてはいませんが 100行分コピーしています。
・図2
<「表3」の数式>
- O3セルの数式
=IF($A3="","",$A3) - P3セルの数式
=IF($A3="","","<"&TEXTJOIN("・",1,IF($B3:$F3=1,$B$2:$F$2,""))&"/"&TEXTJOIN("・",1,IF($G3:$I3=1,$G$2:$I$2,""))&">")
※途中で自動的に改行されているかもしれませんが、全部で 1行の数式です。
※いずれの数式も、入力後(あるいはコピー・貼り付け後)に必要なだけ下方向(行方向)にコピーして完了です。
※コピーする行数は多めのほうが良いかと思います。図2では、見えてはいませんが 100行分コピーしています。
<数式の動作概要>
O3セルの数式については、IF 関数を使った簡単な数式ですので説明を省略します。
他の数式については、「表2」の下記 P3セルの数式が基本になりますので、これについて簡単な動作概要を書いてみます。
=TEXTJOIN("・",1,IF($B3:$F3=1,$B$2:$F$2,""))
まず、IF 関数の働きで、「表1」の $B3:$F3 のセル範囲に数値の 1が入っているセルについては $B$2:$F$2 の範囲の野菜名を、1が入っていないセルについては ""(空白の文字列)を入れた配列を作り出し、これを TEXTJOIN 関数に渡します。
下記は配列の内容の一例です。
{"人参";"玉ねぎ";"じゃがいも";"";""}
TEXTJOIN 関数では、渡された配列の中の ""(空白の文字列)は無視し、他の文字列(この場合は野菜名)間を「・」で区切る形で結合して表示します。
尚、「表3」の P3セルの数式については、「表2」の P3セルと X3セルの数式の結果に「 < 」「 / 」「 > 」を結合した形の数式になります。左端の IF 関数は、$A3セルに何も入力されていない場合に余分な文字列が表示されるのを防いでいます。
以上です。
ご参考になれば幸いです。