[[20180526095304]] 『フォルダ内集計』(コルト) ページの最後に飛ぶ

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

 

『フォルダ内集計』(コルト)

月別のデータを1つのフォルダにまとめ、集計をしようとしています。
集計したいファイルは集計用のファイルと一緒にデスクトップのフォルダ(フテスト)に入っています。
全てのファイルはタイトル行にデータが入っているので集計先の2行目以降に貼り付けを行い(コピー元の2行目から最終行を最終行の次に順次貼り付け)、すべてを張り付けたらアウトラインの小計で集計を行っています。集計の設定は基準はC列目、集計の方法は個数、フィールドはABE列目に設定し、改ページを挿入して実行しています。


Option Explicit

Sub 集計()
'
' 集計 Macro
'

'

    Range("A2:M2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Windows("集計.xlsm").Activate
    Range("A2").Select
    ActiveSheet.Paste
    Selection.End(xlDown).Select
    Range("A2:M2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("集計.xlsm").Activate
    ActiveSheet.Paste
    Selection.End(xlDown).Select
    Range("A2:M2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("集計.xlsm").Activate
    ActiveSheet.Paste
    Selection.End(xlDown).Select
    Range("A2:M2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("集計.xlsm").Activate
    ActiveSheet.Paste
    ActiveWindow.Close
    ActiveWindow.Close
    ActiveWindow.Close
    ActiveWindow.Close
    Selection.End(xlUp).Select
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("A2:A5069" _
        ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("B2:B5069" _
        ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("C2:C5069" _
        ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("E2:E5069" _
        ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Sheet1").Sort
        .SetRange Range("A1:M5069")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Selection.Subtotal GroupBy:=3, Function:=xlCount, TotalList:=Array(1, 2, 5) _
        , Replace:=True, PageBreaks:=True, SummaryBelowData:=True
End Sub

記録を付けながら行ったらこのようになったのですが、集計元のファイルをフォルダにある全てを対象にして集計を行い、コードを短くして高速化する方法を教えてもらえますか?

< 使用 Excel:Excel2016、使用 OS:Windows10 >


一度に考えずに、1つずつできるようにするとよいです。

1)別シートに、データをコピペするマクロ
2)フォルダ内のすべてのブックに同じ処理をするマクロ
3)データが入力されている最終行を求めるマクロ
4)並べ替えのマクロ
5)小計のマクロ

本題の2)は最後がよいと思います。

(マナ) 2018/05/26(土) 12:44


モジュールを動作ごとに分けて作ったモジュールを1つのモジュールにSub 〜 End Subで繋げればいいですか?
(コルト) 2018/05/26(土) 13:00

モジュールでなく、プロシージャのことですね

1)3)で1つ作り
4)を作り
5)を作り
繋げて、1つのブックで集計できるか動作確認

最後に、1)3)部分に2)を追加し、
複数ブックの集計ができるようになれば完成です。

(マナ) 2018/05/26(土) 13:22


フォルダ内のファイルの2行目以降をコピーして集計先のファイルの最終行に貼り付けを行うコードはループ処理になりますか?
その場合の構成文ってどうすれば良かったんでしたっけ
また4と5は小計で一遍にやってしまっても問題ないですか?
(コルト) 2018/05/26(土) 14:10

>ループ処理になりますか?

そうですが、

>その場合の構成文ってどうすれば良かったんでしたっけ

1つのファイルであれば、

>ファイルの2行目以降をコピーして集計先のファイルの最終行に貼り付けを行うコード

はできているということでしょうか?
http://www.relief.jp/docs/excel-vba-open-excel-files-specified-folder.html

>また4と5は小計で一遍にやってしまっても問題ないですか?

ごめんなさい。小計だけでできるとは知りませんでした。
できるのであれば、問題ありません。

(マナ) 2018/05/26(土) 16:41


コメント返信:

[ 一覧(最新更新順) ]


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