重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【解消】通知が届かない不具合について

ExcelVBAで,スタッフ20人分の業務管理記録シートを作って業務記録をとっています。業務管理記録シートは,1日単位で集計し「2021-8-10管理記録」という元ファイル名に日付がついたファイル名にして新ファイルとしてフォルダに格納しています。(ここまではVBAで処理しています。)
このファイルには20人分シートがあり,シート名はスタッフの氏名にしています。
このファイルを5日分ごとに集計しているのですが,5日分のファイル(5個のファイル,月平均20個のファイル)から個人名ごとにマクロを使って,Aさんの業務記録というなスタッフごとのファイルとして取り出せないものかと考えております。
マクロコードをご教示いただけませんでしょうか。
出来ればコードの説明付きでお願いいたします。
よろしくお願いいたします。

A 回答 (3件)

直接の回答ではありません。


スルーしていただいても構いません。


業務記録が1日にどの程度作成されるわかりませんが、1日に1ファイル作成されるのを、週または月または年に変更することをおすすめします。どの程度の期間にするかは、記録される量(ファイルサイズ)で決めることになります。

既存のデータ保存のVBAを上記のように修正すればよいと思います。

1ファイル1シートに全てのデータを入れるようにしておくことで、集計や抽出する場合はフィルタ機能を使用すれば容易にできます。(日付や氏名などは項目として入力しておく)
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
アドバイスのとおり,個人の記録を取り出してファイル化するって,フィルター掛ければできますね。現在も,毎日20名分1シートにまとめられたファイルからマクロのフィルタ機能で個人名ごとにシートを作って集計しているのですから,集計期間を一週間として集計作業日に,1週間分の記録ファイルから,個人のデータを取り出して集計する方が作業時間の短縮につながりますね。
毎日,管理記録ファイルが上がってきたことから一日単位での集計に思考が向いていしまってました。現在は,同一ファイル内に個人別シート作成と記録の集計,新ファイルとして保存としていたのを,集計期間を5日として,元データから個人ごとの記録を取り出し,個人ごとにファイル化するマクロを書き換えてみることにします。
因みに,下記コードを書いたのですが,シート取り出しがうまく実行できませんでした。
Dim WorkSheet As String
WorkSheet = Dir(ThisWorkbook.Path & "\*.xlsm", vbNormal)
Do While WorkSheet <> ""
If WorkSheet <> "抽出.xlsm" Then
Workbooks.Open (ThisWorkbook.Path & "\" & TSheet)
ActiveWorkbook.Sheets("[個人名]").Copy after:= _
Workbooks("抽出.xlsm").Sheets(1)
Workbooks(WorkSheet).Close
End If
WorkSheet = Dir()
Loop

お礼日時:2021/08/13 10:28

No.2です。



5行目末尾のTSheetをWorkSheetにすればよいのではないでしょうか?
もしくは逆の可能性もあります。(WorkSheetをTSheetにする)
    • good
    • 0
この回答へのお礼

googoo900様、何度も回答ありがとうございます。
最初のアドバイスを頂いて、コードを書き換えてみました。
元データから個人名でフィルターを掛け、個人名シートを作成する時に
データの集計もするようにし、同時に個人名のファイル作成までをコード化しました。
アドバイスが本当にありがとうございました。
おかげで、毎日の集計を止めて集計期間を半月と月末の2回に作業短縮できました。
この度は、本当にお世話になりました。

お礼日時:2021/08/14 01:04

ソースコードの作成依頼なら、


どこかでお金払って作成してもらいましょう。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

お礼日時:2021/08/13 09:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!