ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Excel(エクセル)活用コミュのVBA ヘッダーと明細に分かれて入ってくるデータから、集計を取りたい

  • mixiチェック
  • このエントリーをはてなブックマークに追加
はじめまして。

画像のようなデータが毎日csvで入ってきます。
これを元に、

1:店名ごとの、原価金額の合計

2:品名ごとの、数量の合計

を、ボタンひとつで集計できるようにしたいのですが、
分からず悪戦苦闘しています。

(データは多い時には500行以上になります。)


【現状】
csvデータが、ヘッダー部分(レコード区分A)と
明細部分(レコード区分E)に分かれている状態で入ってくる。

1行目および2行目の項目は、毎日事前に作ってある原紙よりコピー&貼り付けをし、
フィルタやピボットテーブルを使い集計をとっている。


1の場合

オートフィルタ機能を使い、
レコード区分“E”の、原価金額の合計を出している。



2の場合

すべてを選択して、ピボットテーブル機能を使い、
商品ごとの数量合計は出しているが、
レコード区分“A”の部分を含まれるため、
集計後に、コピー&貼り付けを行い、店名の部分を削除している。


また、毎日の注文数の累計を一ヶ月ごとに集計する必要があり、
毎日の分は別シートに順に貼り付けて、特定の日でピボットテーブルで集計している。


---------

※問題点

明細部分に、店舗の情報がないため、
店舗ごとの原価金額の累計がピボットテーブルでは出来ず、
商品ピッキングに使うPDFデータを元に手計算。
(レコード区分Aで出した、原価金額の合計と照合はしています。)


店舗ごとの売上を記帳するのも手書きのため、
なんとかこのデータを活用できないか、と考えています。


分かりにくい文章で申し訳ないのですが、
ヒントやアドバイスをいただければ、と思い、スペースをお借りしました。

よろしくお願いいたします。


ちなみに、エクセルのバージョンは2000です、、、。

コメント(12)

明細が入力されている行のどこか(例えばL列)に店名があればよいわけですよね?

レコード区分Aにはさまれているレコード区分Eのデータ(例えば図の11〜19行目)は必ず同じ店名(トウキョウ)なのでしょうか?
もしそうならばVBAでそれほど難しくなくプログラミングできると思います。
VBAでコツコツとやれば難しいところはないように思いますが、どこがわかりませんか?
>Yujinさん
そうです。
レコード区分にAはさまれているのは、必ず同じ店名になります。

また、同じ店名でも明細は最大9行なので、
注文数が多いと、伝票が分かれます。
>ミスキタさん
明細が入力されてる行に店名(もしくは、店コード)を、
どう入れればいいのか、が分からなかったので、、、。
A 店舗あ
E 明細1
E 明細2
A 店舗い
E 明細3
E 明細4
E 明細5

このようになっているデータを、VBAで以下のように再構築すればいいと思います。

店舗あ, 明細1
店舗あ, 明細2
店舗い, 明細3
店舗い, 明細4
店舗い, 明細5

後は、ピボットテーブルでもリストでもVBAでの集計でも好きなように加工できると思いますよ。
>ミスキタさん
明細番号(セルC2の伝票行No)は、伝票番号(セルC1)ごとに1から始まるのですが、
それでも再構築できるものでしょうか??あせあせ(飛び散る汗)

VBA初心者でほんとに良く分かっていなくて、申し訳ないです。。。
> 明細番号(セルC2の伝票行No)は、伝票番号(セルC1)ごとに1から始まるのですが、
> それでも再構築できるものでしょうか??

できますよ。
Aレコードの後にEレコードをつなげるだけです。
再構築するという理屈は分かるのですが、
その手段、特にどう記述したらいいか、で
ずっと躓いていますあせあせ(飛び散る汗)

具体的なデータを用意していただければサンプルを示してくれる人がいるかも知れませんよ。
書いてみた。
こんな流れでどうですか。

'---
Option Explicit

Sub データ再構築()

Dim wsS As Worksheet
Dim wsD As Worksheet

Dim rS As Long
Dim rD As Long
Dim i As Long

Set wsS = Worksheets("Sheet1")
Set wsD = Worksheets("Sheet2")

rD = 1

For rS = 3 To wsS.Cells(Rows.Count, 1).End(xlUp).Row

If wsS.Cells(rS, 1) = "A" Then
  For i = 3 To 4
    wsD.Cells(rD, i - 2) = wsS.Cells(rS, i)
  Next
Else
  If wsD.Cells(rD, 1) = "" Then
    For i = 1 To 2
      wsD.Cells(rD, i) = wsD.Cells(rD - 1, i)
    Next
  End If
  
  For i = 3 To 4
    wsD.Cells(rD, i) = wsS.Cells(rS, i)
  Next
  rD = rD + 1
End If

Next

End Sub
10 のサンプルは以下のリンクからダウンロードできます。

https://docs.google.com/folder/d/0B8gt24-8KXi6Yjk3OWQyNGItYTZjYy00N2EzLWI4MTItOThhMmZhZGFmYzYz/edit
ありがとうございます!
明日、仕事で試してみます。

そして、もう一度ちゃんと基礎から勉強し直します;;

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Excel(エクセル)活用 更新情報

Excel(エクセル)活用のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。