- 締切済み
一覧表を分解する方法を教えてください!!
こんばんは。 下記のような商品の一覧表をお店ごとに分けるにはどのような関数を用いれば良いのでしょうか? いろいろと考えてみたのですがまったく分かりません… みなさん、宜しくお願いします!! 表(1) 商品A 商品B 商品C 商品D 商品E A店 1 3 B店 5 C店 2 2 2 これを下記のように店舗ごとに分解します。 表(2) 商品A 商品C A店 1 3 商品B B店 5 商品B 商品D 商品E C店 2 2 2 シート1に表(1)のデータをそのまま貼り付けると、シート2の方に表(2)のように表示されるように関数を組みたいです。 宜しくお願いします!!
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- KURUMITO
- ベストアンサー率42% (1835/4283)
解答No4です。 シート1でのH2セルへの入力の式に一部誤りがありました。次のようにしてください。 =IF(B2>0,"B","")&IF(C2>0,"C","")&IF(D2>0,"D","")&IF(E2>0,"E","")&IF(F2>0,"F","")
- KURUMITO
- ベストアンサー率42% (1835/4283)
シート1では1行目には項目名があり、A1セルには店名、B1セルには商品A、C1セルには商品B・・のように入力されておりF1セルまで使われているとします。 作業列としてG2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(A2="","",ROW(A1)*3) H2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(B2>0,"B","")&IF(C2>0,"C","")&IF(D2>0,"D","")&IF(E2>0,"E","")&IF(E2>0,"F","") シート2にはお求めの表を作成することにします。 A3セルには次の式を入力し右横方向にオートフィルドラッグしたのちに下方向にもオートフィルドラッグします。 =IF(ROW()>MAX(Sheet1!$G:$G)+2,"",IF(MOD(ROW(),3)=0,IF(ISERROR(INDIRECT("Sheet1!"&MID(INDIRECT("Sheet1!H"&(ROW(A3)/3+1)),COLUMN(A1)-1,1)&1)),"",INDIRECT("Sheet1!"&MID(INDIRECT("Sheet1!H"&(ROW(A3)/3+1)),COLUMN(A1)-1,1)&1)),IF(AND(MOD(ROW(),3)=1,COLUMN(A3)=1),INDIRECT("Sheet1!A"&MATCH(ROW(A3)-1,Sheet1!$G:$G,0)),IF(AND(MOD(ROW(),3)=1,COLUMN(A3)>1,OFFSET(A3,-1,0)<>""),INDIRECT("Sheet1!"&MID(INDIRECT("Sheet1!H"&((ROW(A3)-1)/3+1)),COLUMN(A1)-1,1)&MATCH(ROW(A3)-1,Sheet1!$G:$G,0)),"")))) これでお望みの表がシート2に表示されます。
- MackyNo1
- ベストアンサー率53% (1521/2850)
添付した図のようなレイアウトなら、以下の式をI2セルに入力し、Ctrl+Shift+Enterで確定して配列数式とし、右方向にオートフィルします。 =IF(COUNT(INDEX($B$2:$F$4,MATCH($H2,$A$2:$A$4,0),))<COLUMN(A1),"",INDEX($1:$1,SMALL(IF(ISNUMBER(INDEX($B$2:$F$4,MATCH($H2,$A$2:$A$4,0),)),COLUMN($B$1:$F$2),""),COLUMN(A1)))) I2セルには以下の式を入力し右方向にオートフィルします。 =IF(I1="","",INDEX($B$2:$F$4,MATCH($H2,$A$2:$A$4,0),MATCH(I1,$B$1:$F$1,0))) この2行の数式セル範囲をコピーしてI4セルおよびI'セルに貼り付ければ完成です。
- bakakyatap
- ベストアンサー率38% (115/299)
もっと頭を柔軟にしてください。 やり方は一つではありません。簡単なのはDBとして扱う方法です(VBA以外にも 利用するものがたくさんありますよね)。 なぜ表2が必要かわかりませんが、 A店は何がいくつあるのかの検索結果を1レコード単位で再フォーマットすればいいだけです。 それだと、横軸に店舗名の方がわかりやすいかも。 http://msdn.microsoft.com/ja-jp/library/cc364272.aspx とか、ADOなどエクセルをDBとしてSQLを使う方法もあります。 このロジックならば関数を使ってもできますが、かなり込み入った形になるでしょう。
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 外しているかもしれませんが・・・ ↓の画像で説明させていただきます。 Sheet2の店名を入力すればその店名の商品名と数量が表示できるようにしてみました。 尚、全ての店舗を一気に表示させたい場合は 店舗数だけ同じ数式の表が必要になると思います。 まず、Sheet2のB1セルに =IF(COUNT(OFFSET(Sheet1!$B$1:$F$1,MATCH($A$2,Sheet1!$A$2:$A$10,0),,1))<COLUMN(A1),"",INDEX(Sheet1!$B$1:$F$1,,SMALL(IF(OFFSET(Sheet1!$B$1:$F$1,MATCH($A$2,Sheet1!$A$2:$A$10,0),,1)<>"",COLUMN($A:$E)),COLUMN(A1)))) これは配列数式になってしまいますので、この画面からそのままコピー&ペーストしただけではエラーになると思います。 B1セルに貼り付けた後に、F2キーを押すか、数式バー内で一度クリックします。 編集可能になりますので、Shift+Ctrl+Enterキーで確定してください。 数式の前後に{ }マークが入り配列数式になります。 そして、B2セルに =IF(B1="","",INDEX(Sheet1!$B$2:$F$10,MATCH($A$2,Sheet1!$A$2:$A$10,0),MATCH(B1,Sheet1!$B$1:$F$1,0))) (これは配列数式ではありません) 最後にB1・B2セルを範囲指定し、オートフィルで列方向にコピーすると 画像のような感じになります。 これでA2セルに店名を入力すればその商品名と数量が表示されるはずです。 尚、数式はSheet1のデータがB1~F10まで対応できるようにしていますが、 データ量によって範囲指定の領域はアレンジしてみてください。 以上、長々と書きましたが 参考になれば幸いです。 的外れなら読み流してくださいね。m(__)m