[[20141126151251]] 『データの集約?』(エクセル初心者) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『データの集約?』(エクセル初心者)

個人会社の事務員です。
週に一回提出する表を作成しているのですがすごく手間がかかって困っています

前任者の方は、エクセルが得意だったらしく5分で作成していた様で
毎回一時間かかっているのを注意されています。

現場の方からシステム?で出力した表頂き
加工して作っているのですがそろそろ限界ですので
どなたかアドバイス下さい。

A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P
日付,品名1,品名2,購入先,購入時間,購入金額,×,×,×,×,購入者,
備考1,備考2,×,購入先名,購入先略称
2014/11/3,野菜,トマト,フレスコ,10:00,130,,,,,田中,傷んでた,交
換した,,フレスコ,F

↓データは2行目開始で200〜400行続く

現状このような操作をしています。
1)K列の購入者でソートし、購入者毎(10名前後)にシートを作る
2)Dの購入先を略称に変換する
 (MAX40種類でO列P列に2行目から41行目まで入力してあります)
3)ABC列をまとめてソートする為、関数で纏める
4)R列に購入者を表示する
5)S列に購入先略称+購入時間+購入金額を表示する(F_10:00(130))
   関数は=D2&"_"&HOUR(E2)&TEXT(MINUTE(E2),"00")&"("&F2&")"で入れていま
す。
6)T列に品名1を表示する
7)T列については、上行と同じデータは表示を消す
  ただし、ABCが同じ場合のみで変われば消さない。
8)UV列には備考1と備考2を表示する
  ただし、ABCが同じ場合のみで変われば消さない。

2〜7)は各シートで同じ事をしておりマクロ化したいのですが
さっぱりわかりません。
変換を一度マクロの記録でやってみたのですが購入先が変わるのでうまくいきませんでした

変換の簡素化や、表示を消す等少しでも構いませんのでどなたかアドバイス下さい。
よろしくお願いいたします。

< 使用 Excel:Excel2007、使用 OS:Windows7 >


とりあえず、1シートにまとまったデータを分ける例。

 Sub test()
    Dim DIC As Object
    Dim i As Long
    Dim j As Long
    Dim cw As String
    Dim Keys As Variant

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    Set DIC = CreateObject("Scripting.Dictionary")

    For i = Sheets.Count To 1 Step -1
        If Sheets(i).Name <> Me.Name Then
            Sheets(i).Delete
        End If
    Next i

    Range("A1").CurrentRegion.SortSpecial Header:=True, _
        Key1:=Range("k1"), Order1:=xlAscending

    For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
        cw = Cells(i, "K").Value
        If Not DIC.Exists(cw) Then
            DIC.Add cw, cw
        End If
    Next i
    Keys = DIC.Keys
    For i = 0 To DIC.Count - 1
        Sheets.Add after:=Sheets(Sheets.Count)
        Sheets(Sheets.Count).Name = Keys(i)
        Rows(1).Copy Sheets(Sheets.Count).Range("A1")
    Next i

    Range("A1").CurrentRegion.SortSpecial Header:=True, _
        Key1:=Range("a1"), Order1:=xlAscending, _
        Key2:=Range("d1"), Order2:=xlAscending, _
        Key3:=Range("e1"), Order3:=xlAscending

    For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
        cw = Cells(i, "K").Value
        For j = 0 To DIC.Count - 1
            If cw = Keys(j) Then
                With Sheets(Keys(j))
                    Rows(i).Copy .Cells(.Rows.Count, "A").End(xlUp).Offset(1, 0)
                End With
                Exit For
            End If
        Next j
    Next i

    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub
(???) 2014/11/26(水) 17:45

???さんへ
お返事ありがとうございます
これはマクロ記録する標準モジュールにコピーしたらいいのでしょうか?
実際に試してみたのですが
14行目でMEのところに色がついてエラーで止まってしまいます
コピーする箇所を間違えていたらすいません
よろしくお願いします
(エクセル初心者) 2014/11/27(木) 15:41

データの入っているシートの、シートモジュールに貼り付けて実行してみてください。
Meは自シートを指します。標準モジュールではシートを持たないので、エラーになります。

マクロを実行したシート以外を全部削除後、購入者別シートを作成します。
略称への変換や、品名の連結等は未対応ですが、関数式でトライしてみてください。
(???) 2014/11/27(木) 15:47


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.