• ベストアンサー

エクセル 表の列を行に移行したい

エクセル2007を使用しています。 表の中の列を行に移行したいのです。 添付した画像の商品の列(A~E)を右表の行に移行したいのです。 関数あるいはVBAで対応できないでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • 135ok
  • ベストアンサー率34% (26/75)
回答No.3

一例です。 添付資料を参照ください。 作業列をA列に作る A2 =B2&C2    *文字をつなぎ、栃木Aとする。 表の表示の仕方。 G3 =IF(COUNTIF($A:$A,$F3&G$2),VLOOKUP($F3&G$2,$A:$D,4,0),"")    *栃木AがA列にある時、表からVLOOKUPで表示、以外は空欄。    *表示させたい範囲にコピー

taka1012
質問者

お礼

ご回答ありがとうございます。 ご提示いただいた関数は私でも理解できます。 お世話様でした。

その他の回答 (2)

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

お示しの表がシート1にあるとして、答えの表をシート2に作るとします。 シート1のD3セルには次の式を入力して下方にオートフィルドラッグします。 =IF(A3<>"",COUNTA(A$3:A3)&"/"&A3&"a"&B3,IF(AND(A3="",B3<>""),LEFT(D2,FIND("a",D2))&B3,"")) シート2では1行目にはB1セルから右横方向に商品名のA,B,C,D・・・のように入力をします。 A2セルには次の式を入力して右横方向にオートフィルドラッグしたのちに下方にもオートフィルドラッグします。 =IF(COUNTIF(Sheet1!$D:$D,ROW(A1)&"*")=0,"",IF(COLUMN(A1)=1,INDEX(Sheet1!$A:$A,MATCH(ROW(A1)&"*",Sheet1!$D:$D,0)),IF(COUNTIF(Sheet1!$D:$D,ROW(A1)&"/"&$A2&"a"&A$1)=0,"",INDEX(Sheet1!$C:$C,MATCH(ROW(A1)&"/"&$A2&"a"&A$1,Sheet1!$D:$D,0)))))

taka1012
質問者

お礼

ご回答ありがとうございます。 ご提示いただいた関数で上手くいきました。 私にとっては非常に複雑な関数の組み合わせなので、じっくりと検証してみます。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

おはようございます! 色々方法はあるかと思いますが・・・ 一例です。 参考になるかどうか判りませんが、 ↓の画像のような感じで表を作ってみました。 Sheet1のデータをSheet2にまとめるようにしています。 ここで作業用の列をSheet1に3列使わせてもらっています。 県名の列に空白がなければ県名用のF列は必要なくなります。 まず、Sheet1の作業列D2セルに =IF(COUNTIF(A$2:A2,A2)=1,ROW(A1),"") として、オートフィルでE2セルまでコピーします。 F2セルに =IF(B2="","",IF(A2="",F1,A2)) そして、D2~F2セルを範囲指定し、F2セルのフィルハンドルで 下へずぃ~~~!とコピーします。 (Sheet2の数式が1000行まで対応できるようにしていますので、そのくらいまでコピーしても構いません) 次にSheet2の方ですが、商品名のB1セルに =IF(COUNT(Sheet1!$E$2:$E$1000)<COLUMN(A1),"",INDEX(Sheet1!$B$2:$B$1000,SMALL(Sheet1!$E$2:$E$1000,COLUMN(A1)))) として、列方向にコピーします。 県名のA2セルに =IF(COUNT(Sheet1!$D$2:$D$1000)<ROW(A1),"",INDEX(Sheet1!$A$2:$A$1000,SMALL(Sheet1!$D$2:$D$1000,ROW(A1)))) とし、下へコピーします。 最後にB2セルに =IF(OR($A2="",B$1=""),"",SUMPRODUCT((Sheet1!$F$2:$F$1000=Sheet2!$A2)*(Sheet1!$B$2:$B$1000=Sheet2!B$1),Sheet1!$C$2:$C$1000)) とし、行方向と列方向にコピーすると画像のような感じになります。 尚、データがない部分に関しては「0」と表示されますので 目障りであれば、メニュー → ツール → オプション → 表示タブで 「ゼロ値」のチェックを外せばOKかと思います。 以上、長々と書きましたが 参考になれば幸いです。 他に良い方法があれば読み流してくださいね。m(__)m

taka1012
質問者

お礼

ご丁寧な解説ありがとうございます。 わからない関数もあるので自分で検証してみます。

関連するQ&A