【Excel】【質問】"1"のある項目を,新しい表に示す方法がわかりません。

Anonymous
2021-09-12T06:17:43+00:00

現在「表1」→「表3」にする方法を模索しています。
そこで「表1」→「表2」→「表3」にしようと考えました。

質問なのですが,「表1」→「表2」にする方法にはどのようなものがありますか?
Excel関数,VBAを試してみたのですが「表2」の野菜の結果である「人参・玉ねぎ・じゃがいも」と出力するところが上手くいきませんでした。
また,「表1」→「表3」の方法もあわせて教えていただけたら幸いです。

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

※「表2」→「表3」はCONCAT関数で表示しようと思っています。

Microsoft 365 と Office | Excel | 家庭向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

質問作成者が受け入れた回答

ひまじん 17,185 評価のポイント
2021-09-13T01:29:58+00:00

こんにちは。

ご希望のことを行うには、VBA を使っても関数を使っても良いかと思いますが、ここでは、関数を使った方法をご紹介します。

まず、「表2」に使える関数についてですが、Microsoft365( Office365 )の Excel をお使いのようなので、TEXTJOIN 関数がピッタリかと思います。(「スピル」も使えますので。)

・TEXTJOIN 関数

https://support.microsoft.com/ja-jp/office/textjoin-%E9%96%A2%E6%95%B0-357b449a-ec91-49d0-80c3-0e8fc845691c

図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セルに何も入力されていない場合に余分な文字列が表示されるのを防いでいます。

以上です。

ご参考になれば幸いです。

この回答は役に立ちましたか?

1 人がこの回答が役に立ったと思いました。
0 件のコメント コメントはありません

2 件の追加の回答

並べ替え方法: 最も役に立つ
  1. ひまじん 17,185 評価のポイント
    2021-09-13T11:02:03+00:00

    ご参考になったようで良かったです。

    >①TEXTJOIN関数で使用されている「TEXTJOIN("・",1,(一部省略))」の「1」は,TRUEという意味なのでしょうか?

    これについては、お考えの通りです。

    もっと言えば、ワークシート上では、数値の 0 は FALSE と同義で、0 以外の数値(プラス、マイナス、整数、少数など)は全て TRUE と同義です。

    例えば、どこかのセルに、

    =IF(0,TRUE,FALSE)

    という数式を入れてみてください。

    この場合、第一引数(論理式)が数値の 0 なので、結果は必ず FALSE となります。

    次に第一引数(論理式)に 0 以外の数値を入れてみてください。

    例えば、-2、5、0.1、-0.003 などの数値を入れた結果は全て TRUE となります。

    >②項目の入力がないとき「-」(ハイフン)を入力したいのですが,どのような方法がありますでしょうか?

    これについてですが、通常、IF(G7:I7=1,・・・,"-") というような書き方をすると、G7:I7=1 の部分は配列となるため、IF 関数の結果も配列が返されると考えてみてください。あくまで考え方です。

    具体的には、

    • G7=1 ならば、配列の先頭に ・・・ の値を組み込み( ・・・ が配列ならば、その配列の先頭要素を組み込み)、G7<>1 ならば、配列の先頭に "-" を組み込む。
    • H7=1 ならば、配列の 2番目に ・・・ の値を組み込み( ・・・ が配列ならば、その配列の 2番目の要素を組み込み)、H7<>1 ならば、配列の 2番目に "-" を組み込む。
    • I7=1 ならば、配列の 3番目に ・・・ の値を組み込み( ・・・ が配列ならば、その配列の 3番目の要素を組み込み)、I7<>1 ならば、配列の 3番目に "-" を組み込む。

    というようになります。

    ご紹介した数式(「表3」の P3セルの数式)の中で、

    IF($G3:$I3=1,$G$2:$I$2,"")

    というような部分は、上記のような考え方で組んでいます。

    つまり、ご希望のことを行うには、G7:I7=1 の部分が配列を返さないようにすれば良いので、例えば、SUM(G7:I7) というように変更すれば配列ではなく単独の数値を返します。

    ご紹介した数式(「表3」の P3セルの数式)を変更するならば、下記のようになります。一例です。

    =IF($A3="","","<"&IF(SUM($B3:$F3),TEXTJOIN("・",1,IF($B3:$F3=1,$B$2:$F$2,"")),"-")&"/"&IF(SUM($G3:$I3),TEXTJOIN("・",1,IF($G3:$I3=1,$G$2:$I$2,"")),"-")&">")

    ※途中で自動的に改行されているかもしれませんが、全部で 1行の数式です。

    ※数式の入力後(あるいはコピー・貼り付け後)、再度、必要なだけ下方向(行方向)にコピーするのをお忘れなく。

    尚、数式中で何も入力されていないセルを参照した場合、数値の 0 が入力されているものとして扱われますので、例えば、G3:I3 のセル範囲に何も入力されていなければ、SUM($G3:$I3) の結果は数値の 0( FALSE と同義)が返ります。

    もし、G3:I3 のセル範囲にいくつかの数値 1 が入力されていた場合、SUM($G3:$I3) は加算した結果の数値( TRUE と同義)が返りますので、上記のような書き方が出来ます。

    図3は「表3」にこの数式を適用した結果です。

    ・図3

    画像

    お試しになって見てください。

    ただ、こちらでは検証環境が Web 版の Excel しかないため、提示されている「変更後」の数式で、お書きになっておられるような「人参」がたくさん出力される現象は確認できず、その原因の特定も出来ませんでした。ご了解ください。

    お役に立てれば幸いです。

    この回答は役に立ちましたか?

    1 人がこの回答が役に立ったと思いました。
    0 件のコメント コメントはありません
  2. Anonymous
    2021-09-13T05:16:44+00:00

    ご返信ありがとうございます。
    TEXTJOIN関数を存じ上げていなかったのでとても参考になりました^^

    追加の質問が2点ございます。
    ①TEXTJOIN関数で使用されている「TEXTJOIN("・",1,(一部省略))」の「1」は,TRUEという意味なのでしょうか?

    ②項目の入力がないとき「-」(ハイフン)を入力したいのですが,どのような方法がありますでしょうか?IF関数で試したところ「人参」がたくさん出力される結果となりました。(下の図1)

    ▼図1

    差し支えなければよろしくお願いいたします。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません