• ベストアンサー

エクセルデータの抽出

添付イメージのような構成で既存在庫表があります。これをピボットなどに持っていけるようなテーブル形式に直したいのですが、データ量から手打ちではちょっとつらいので何か良い方法はないでしょうか。 よろしくお願いします。

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

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

ごめんなさい。回答No1,2,3です。 回答No3で示したマクロで For n = 3 To 28 Step 5 は For n = 3 To 123 Step 5 に変更してください。

verify
質問者

お礼

迅速なご回答をありがとうございます。あっという間にできて本当に助かりました。また、宜しくお願い致します。

その他の回答 (3)

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

回答No1,2です。 関数で処理することよりもマクロで処理することの方が楽ですね。 例えばシート1にお示しの元の表が有るとしてシート2にはA1セルからG1セルに日付から価格までの項目名を入力します。 そこでシート1に戻ってシート見出しでシート1を右クリックして「コードの表示」を選択します。 表示の画面には下記のコードを入力します。 Sub 表の作成() Set WS1 = Worksheets("Sheet1") Set WS2 = Worksheets("Sheet2") Dim m, i, n As Long m = 2 For i = 3 To WS1.Range("A65536").End(xlUp).Row For n = 3 To 28 Step 5 If WS1.Cells(i, n) <> "" Or WS1.Cells(i, n + 1) <> "" Or WS1.Cells(i, n + 2) <> "" Or WS1.Cells(i, n + 4) <> "" Then WS2.Cells(m, "A") = WS1.Cells(i, "A").Value WS2.Cells(m, "B") = WS1.Cells(i, "B").Value WS2.Cells(m, "C") = WS1.Cells(1, n).Value WS2.Cells(m, "D") = WS1.Cells(i, n).Value WS2.Cells(m, "E") = WS1.Cells(i, n + 1).Value WS2.Cells(m, "F") = WS1.Cells(i, n + 2).Value WS2.Cells(m, "G") = WS1.Cells(i, n + 4).Value m = m + 1 End If Next Next End Sub これで終了です。 マクロを実行するのには「開発」タブの「マクロ」から表の作成を選んで「実行」をクリックします。

verify
質問者

補足

大変助かります。当方マクロについては全くわかりませんが、ご指示の通りの操作であっという間にできました。ただ、商品については、6つ目までしか取れていないようです。 商品数25品目までのデータを取得するには、プログラム中の数値を変更するだけで可能でしょうか。よろしくお願いします。

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

お示しの表からどんな表にしたらよいのですか?

verify
質問者

補足

1行目はラベルで日付欄 顧客名欄 商品名欄 出庫欄 入庫欄 サンプル欄 価格欄としたいです。元表の在庫数は必要ありません。 2行目以降、実際のデータを1行目のラベルを元に作成したいのです。 ただ、元表では商品は25種類横に並んでいます。同一の日に顧客であるABC社が、うどん、らーめん、スパゲティをそれぞれ処理している場合があります。 この場合は、商品毎に行を変えたいのです。 日付   顧客名 商品名 入庫 出荷 サンプル 価  格 2013/1/1 ABC うどん  0 10   0  2000 2013/1/1 ABC ラーメン 0  5   0  1000 2013/1/1 ABC うどん  0 13   1  2000 という具合です。 宜しくお願い致します。

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

最終的にどんなことをしたいのでしょう。関数などで対応できませんか?

verify
質問者

補足

ピボット分析に用いることができるデータベースにして、売上分析をしたいと思っています。

専門家に質問してみよう