- ベストアンサー
データ集計&グラフ化できるエクセル97のマクロを作成したい
複数のCSV形式のファイルを集計&加工し、結果の一覧表及びグラフを 作成するマクロを作りたいのですが、実現方法がわかりません。 直接的でなくても、手がかりになる方法や部分的な実現方法を教えて ください。 ●入力ファイルの指定方法 CSV形式でファイル名は、20020715.csv、20020815.csv等、年月日から 構成されていて、開始・終了年月を指定できるようにしたい。 ●入力ファイルの中身 CSV形式の中身は、作業者、実績日、プロジェクト、コード、時間の順で 書かれており、このフォーマットで何行もデータが並んでいます。 ●集計内容 複数ファイルに跨る上記のデータを集計し直しプロジェクト毎に 分類し、更にコード毎の全作業者の時間を合計したものを実績日毎に 並べて一覧表・グラフを作成したい。また、結果をファイル保存したい。 ●具体例 入力ファイル1:20020715.csv 中身:作業者A, 2001/7/2, Prj_Y, B, 10 作業者A, 2001/7/2, Prj_X, A, 3 作業者B, 2001/7/9, Prj_X, A, 8 (実際にはもっと多数のデータ有り) 入力ファイル2:20020815.csv 中身:作業者A, 2001/8/ 5, Prj_Y, A, 5 作業者B, 2001/8/ 5, Prj_Y, A, 3 作業者B, 2001/8/12, Prj_X, B, 6 (実際にはもっと多数のデータ有り) 出力ファイル1:Prj_X.xls 中身:日付 A B 2001/7/ 2 3 0 2001/7/ 9 8 0 2001/8/ 5 0 0 2001/8/12 0 6 出力ファイル2:Prj_Y.xls 中身:日付 A B 2001/7/ 2 0 10 2001/7/ 9 0 0 2001/8/ 5 8 0 2001/8/12 0 0 横軸日付、縦軸時間でA,Bの遷移を示すグラフも欲しい。 教本を読んでも恥ずかしながらわかりません。 説明が下手で申し訳有りませんが、皆様のお知恵を貸してください。 m(_ _)m
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 どのくらい、VBAの知識があるかにもよりますが、大変なコーティングに なるでしょうね。アクセスでやった方が簡単な気が。。。 システム1本組みたいけど、組み方を教えて的なご質問では回答はしにくいと思います。 マクロ記録でもしながら不明な点を聞かれた方が良いと思います。 '取あえず、指定したCSVファイルを開く(CtrlやShiftで複数選択可)サンプル Sub Test() Dim Files, FilesCnt As Integer, i As Integer Files = Application.GetOpenFilename _ (FileFilter:="CsVFile(*.csv), *.csv", MultiSelect:=True) If IsArray(Files) Then FilesCnt = UBound(Files) For i = 1 To FilesCnt Workbooks.Open Files(i) Next i End If End Sub ご参考に。
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
1.基本-オフラインバッチ処理で行う。 2.データ量-6万5千以下ならエクセル使用可。以下と 仮定する。 3.用意-(1)分れているファイルを一本化するプログラム (2)一本化したファイルをソートするプログラム (3)一本化したデータを集計するプログラム (本件の場合) (1)はエクセルを使うなら、前ファイル読みこみ後の データの終わりの次にカーソルを置いて、次のファイルを読みこみ するを繰り返す。 (2)はエクセルを使う。使わないなら、ソートプログラムを 自作して用意する。 (3)は自作の方が良いでしょう。データがエクセルに 収まってから、集計などで済ませられないかやって見る手 もある。 4.実施 (1)エクセルにファイルを読み込ます。順次ファイル を読みこませる。各ファイルが少し違うなら修正プログ ラムで行うか、エクセル別シートに読みこんだ後に修正 する。 (2)プロジェクト+日付け+作業者+作業コード順に ソートする。 (3)再度CSVファイルで保存する。 エクセルのシートデータを直接対象として集計 も出来る(スピードは遅いがこちらが良いかも) 。 (4)集計プログラムは1レコードを読んで前レコードのキーと比較して、 プロジェクトが変わると別シートに記録する。 第1キーである日付けが変わると次行に行く。 作業者(コード)が変わるまで時間の足しこみをする。 作業者が変わるとそのセルに合計値をセットし、 次列へ移動する。 小計が必要なら、足しこんで合計して行く。 集計はエクセルの関数機能を使える。 (VBAの中からWorksheetFunctionを使う) 書式や総集計は手作業でやるも良い。 (5)グラフ化はエクセルの機能を使う。 ファイルはエクセルで保存する。CSVで保存するなら、それも出来る。
お礼
ありがとうございます。 参考にさせていただきます。 わからないことが多すぎますので、もう少し質問の的を絞って、 改めて別質問を起こしたいと思います。
補足
#2の方に教えていただいたサンプルプログラムでファイル入力方法は わかったのですが、その後、本回答でご教示いただいている、 ファイルを一本化するところで、躓いてます。 別質問を下記URLで起こしましたので、皆様、よろしくお願い致します。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=361233
お礼
ありがとうございます。 参考にさせていただきます。 わからないことが多すぎますので、もう少し質問の的を絞って、 改めて別質問を起こしたいと思います。
補足
ご紹介いただいた方法で、複数のファイルをオープンできました。 その複数のファイルを、集計用のワークシートを起こして、順に繋げて いく操作をしたいのですが、なかなかうまくいきません。。 勉強不足で恐縮なのですが、ご教示頂けないでしょうか。 よろしくお願い致します。