• ベストアンサー

エクセル 関数 範囲のタイトルを1つのセルに帰す

こんなことをしたいのですが、関数でできますでしょうか?         りんご みかん ばなな   A子   2   1   0    りんご、みかん B子   0   0   1    ばなな、 C子   1   1   1    りんご、みかん、ばなな D子   0   0   0   E子   0   4   0    みかん ・ ・ X子 例のように、A子~X子までがそれぞれりんご、みかん、ばななを買ったとき、買ったものの名前だけを、それぞれの名前と同じ行で、1つのセルに表示したいのです。果物の種類は10個以下で、どんな順番に記入されてもかまいません。実際はX子以上にたくさんいます。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#96418
noname#96418
回答No.1

質問にある表の場合なら、セルE2に =IF(B2>0,IF(C2>0,IF(D2>0,B$1&"、"&C$1&"、"&D$1,B$1&"、"&C$1),IF(D2>0,B$1&"、"&D$1,B$1)),IF(C2>0,IF(D2>0,C$1&"、"&D$1,C$1),IF(D2>0,D$1,""))) と入力して、下へコピーしてください。

grb2008
質問者

お礼

できました、できました! やっぱりできる方にはできるものなのですねぇ~! =IF(B2>0, まではなんとなくそんな感じがしたのですが、その後がまったく浮かびませんでした。 ありがとうございました。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

この課題はVBA向きです。関数では工夫を要するか、相当複雑になります。 例データ A1:D6 ーー りんご みかん ばなな A子 2 1 0 B子 0 0 1 C子 1 1 1 D子 0 0 0 E子 0 4 0 ーーーーーーーーーー Sub test01() d = Range("A65536").End(xlUp).Row MsgBox d For i = 2 To d k = 8 'G列から右へ For j = 2 To 4 'B-D列について If Cells(i, j) <> 0 Then Cells(i, k) = Cells(1, j) '第1行の名称をK列にセット k = k + 1 '1列右へ End If Next j Next i End Sub ーーー 結果 H-J列 りんご みかん ばなな りんご みかん ばなな みかん H列へ文字列として出すことも少々の変更で可能だが。 Sub test02() d = Range("A65536").End(xlUp).Row MsgBox d For i = 2 To d s = "" For j = 2 To 4 'B-D列について If Cells(i, j) <> 0 Then s = s & Cells(1, j) & "," '第1行の名称をつなぐ End If Next j MsgBox s If s <> "" Then Cells(i, "H") = Left(s, Len(s) - 1) End If Next i 結果 りんご,みかん ばなな りんご,みかん,ばなな みかん

grb2008
質問者

お礼

すいません、VBAはまだ初歩の初歩段階なので知識が追いついていません。もう少しVBAに詳しくなってから参考にさせていただきます。 ありがとうございました。

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.3

別解です。 最後に余分なカンマがついてしまうのが難です。 (例)りんご,みかん, (取ろうと思えば可能ですが、式が無駄に長くなるのでボツ) =CONCATENATE(IF(B2,B$1 & ",",""),IF(C2,C$1 & ",",""),IF(D2,D$1 & ",",""))

grb2008
質問者

お礼

圧巻です。。。 CONCATENATE、、、知りませんでした。 まだまだ勉強が足りないようです。 ありがとうございました。

noname#96418
noname#96418
回答No.2

補足です。 果物の種類がもっと多い場合には、それらをいくつかのグループに分けて#1のような式を個別に適用し(作業列に)、結果の文字列を & で結合されたらよいでしょう。 あるいは、もっと簡単に、果物ごとに作業列を使って =IF(B2>0,B$1,"") などとして、同様にされてもよいでしょう。

grb2008
質問者

お礼

できれば作業列を使わないでできればと思っていたので・・・。 member_idさまの初めの回答に満足しています。 ありがとうございました。

関連するQ&A

専門家に質問してみよう