• ベストアンサー

エクセルで列を複数行にしたいのですが

注文表を商品ごとに集計したいのですが、商品名・数が列の入っています。これを縦にして集計しようと思っているのですが、列を行する方法を教えてください。 エクセルの表で列A・Bを共通にして列C・Dを次の行に、そして列E・Fを次の行にとしたいのですが、教えてください。 列A 列B   列C  列D 列E 列F 001 ○○会社 商品A 10  商品F 14 001 ○○会社 商品C 11  商品A 20 005 ××会社 商品D 32  商品C 25 これを 列A 列B   列C  列D 列E 列F 001 ○○会社 商品A 10  001 ○○会社 商品F 14  001 ○○会社 商品C 11  001 ○○会社 商品A 20  005 ××会社 商品D 32  005 ××会社 商品C 25 よろしくお願いいたします。

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

  • ベストアンサー
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.2

マクロでやる方法です。Sheet1に元の表があって、Sheet2に並べ替えた表を作成します。 Alt+F11でVBAの画面を表示し、「挿入」>「標準モジュール」を選択して、右の画面に以下のマクロをコピーして貼り付けてください。 マクロ中に出てくる"Sheet1"、"Sheet2"が実際のシート名と違ったら書き換えてください。 Sub 並び替え()  Dim WS1 As Worksheet, WS2 As Worksheet  Dim FromRow As Integer, FromCol As Integer  Dim ToRow As Integer    Set WS1 = Worksheets("Sheet1") '元の表があるシート  Set WS2 = Worksheets("Sheet2") '表を並べ替えて転記するシート  WS2.Cells.ClearContents  For FromRow = 1 To WS1.Cells(Rows.Count, 1).End(xlUp).Row   For FromCol = 3 To WS1.Cells(FromRow, Columns.Count).End(xlToLeft).Column Step 2    ToRow = ToRow + 1    WS1.Cells(FromRow, 1).Resize(1, 2).Copy WS2.Cells(ToRow, 1)    WS1.Cells(FromRow, FromCol).Resize(1, 2).Copy WS2.Cells(ToRow, 3)   Next  Next End Sub その画面でF5キーを押すか、F11でExcelの画面に戻ってAlt+F8からマクロを実行してみてください。表が4列ずつになってSheet2に転記されているはずです。 うまく動かない、あるいは意図したのと異なる動作をする場合は補足をお願いします。

risa5555
質問者

お礼

ちゃんと転記されました。 マクロ勉強します。 どうもありがとうございました。

その他の回答 (2)

noname#95859
noname#95859
回答No.3

難しく考えないで、こんなのはどうでしょう。 現在ある表をヘッダー部分を除いて、そのまま、コピーして、表の下に付け足し、 付け足した部分のC列、D列の部分に、E列、F列を移動させます。 その上で、A列、B列でソートする。 しかし、このままでは、要求の順番は達成できていません。補助の符号を用意します。 G列に順番を振っておきます。コピーしたものにも同じ番号をつけておきます。 ソートをA列、B列、G列でやれば、目標を達成できます。 手順 (1)G列に通し番号を与える。 (2)A2:G4をコピー、A5をクリックして、ペーストする (3)E列、F列を左に移動させる。E5:F7をドラッグ。 (C列、D列に持ってくるのです) (4)全セルを選択 (5)列A,列B,列Gの優先順序でソートする (6)不要な情報(列E,列F,列G)を削除する 原始的では在りますが、結構手軽だと思います。

risa5555
質問者

お礼

このようなやり方あるんですね、参考になりました。 ありがとうございました。

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

質問の表現が不完全。全てB+cとE+Fの2組しかないなら、少し簡単だが、実情はそうではないでしょう。 結構難しい。VBA向きの問題ですね。 簡単のため例データA2:E4に aa x y z u bb s t cc f g h ・・・ とする。 作業列をG列として G1に =COUNTA(B1:F1) と入れてG4まで式を複写 結果 0 4 6 9 累積値が出せる。 もうひとつ作業列をJ列に =MATCH(ROW()-1,$G$1:$G$100,1) と入れてG列の最大値9行まで式を複写する。 J列は 1 1 1 1 2 2 3 3 3 となる ーー K1に =OFFSET($A$2,J1-1,0)と入れて第9行まで式を複写。 L1に =OFFSET($B$2,J1-1,COUNTIF($J$1:J1,J1)-1) といれて第9行まで式を複写。 結果 aa x aa y aa z aa u bb s bb t cc f cc g cc h となる。 商品と数量のペアになった質問の場合は少し修正が必要ですが、息切れしてここまでにします。

risa5555
質問者

お礼

参考になりました どうもありがとうございました。

関連するQ&A