- 締切済み
エクセル 複数シートのデータを別ブックにまとめる
月毎の実績表を作ろうとしています。 構成は、7~6月の12枚シートでひとつのブック【実績表.xlsx】(上画像)。 これとは別に、各営業が入力できるブックを12か月分【7月営業.xlsx ~ 6月営業.xlsx】(下画像)。 下画像にあるデータを上画像の表にまとめたいのです。 セルの対応 上画像 下画像 B列23行以下 シート名 C列〃 A列orE列35行~49行 E列〃 B列orF列〃 H列〃 C列〃 I列〃 D列〃 K列〃 G列〃 L列〃 H列〃 これを鈴木さんデータから順にまとめれるようお願いします。 VBAをネット検索し、同ジャンルのQ&Aを複数見つけたのですが、なにぶん素人なものでよくわかりませんでした。 非常に困っていますので、どなたかお助けください。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- hallo-2007
- ベストアンサー率41% (888/2115)
No2です。 >a1セルを起点にした入力シートが必要ということでしょうか。 >事前に調べてもそのパターンばかりでしたので。 なぜ1行目にフィールド名を入れて皆さんが活用するのでしょうか? エクセルもそうですが、データベースの構造の基本がそうだからです。 決められたエクセルのフォーマットがあって変更することが難しいことは わかりますが、No3の方がおっしゃるように中間のデータベースとなるシートを 活用することが一番の解決方法です。 2つの事について勉強してみてください。 1、VBAの基本を勉強すること 先に紹介したコートで、ブック名(月名が情報と入っていますI シート名(担当者名が情報です)、セルの値(ユーザー名や金額)が入っています。 これくらいのコードが理解して、ご自身の物して修正して使ってください。 2、エクセルをどのように活用していくのか、それぞれのパソコンやサーバーとの 接続、だれがどの時点でデータを入れるのか、総合的に考えてください。 入力のフォーマット、出力(集計結果)のフォーマットは今のままでも可能です。 そのために、中間となるデータベースのシートを使わない手はないわけです。 今回の目的は、VBAを理解すれば、難しいことではなく、コードを作るのが手間が かかるだけの事ですが、勉強と思ってチャレンジするもよし、今回は手作業でやるも良しです。 しかし、こんな苦労を続けてやることがないように、運用を考えることをお勧めします。 一般的な方法といえば 入力の画面が作って、営業担当者がデータを入力したら共有で使えるサーバーのフォルダー にエクセル、一枚のシートに縦方向にデータが蓄積されるVBAを作成 集計や日報などの必要なシートにデータを表示させるVBAを作成する。 最終的にはこのような構成について皆さんで検討してください。 担当者ごとや月別にシートが分かれたり、ファイルが分かれたりする運用は結局、無理が発生します。
- molly1978
- ベストアンサー率33% (393/1186)
かなり面倒な作業をエクセルでやらせよようとしているようですが、VBA経験が 全くないのに、ここで質問したからといって簡単にできるとは思えません。 まず、VBAの基礎を勉強して下さい。 1.下表E列、F列は必要ですか。A列B列と全く同じで不要ではないですか? 2.集計した結果を上表にまとめようとしていますが、慣れないうちは案件ごとに 集計した中間ファイルをつくるとよいと思います。並べ替えと件数をカウントすることで できると思います。 3.その上で、中間の集計ファイルから上表にコピーすればよいかと思います。 データを見る限り、エクセルの手作業でやってもそれほど時間がかかるとは 思えません。VBAを勉強しながら、当分は手作業でやったらどうでしょうか。 その中で、どうやったら効率的にできるか、アイデアがでると思います。
- hallo-2007
- ベストアンサー率41% (888/2115)
意地悪で申し上げてるのではないですが、No1の方がおっしゃるように 元々のファイルの構成が非常に悪いです。 営業担当者ごとにシートが分かれて、月ごとにファイルが分かれる 運用の仕方を考え直してください。 結局、集計やグラフの作成などの時に、この様な問題に突き当たってしまいます。 毎日の仕事ができればOKではなく、長く使い続けることまで検討してシート構成を決めます。 と云っても失礼なので 下表(担当者ごとのシート)のファイルについてですが、 一番上に、シートを追加 A B C D E F ファイル名 シート名 ユーザー名 案件名 売上 利益 と1行目に準備 Sub ボタン1_Click() For i = 2 To Sheets.Count For j = 35 To 49 GYOU = Range("C" & Rows.Count).End(xlUp).Row + 1 Range("A" & GYOU).Value = ActiveWorkbook.Name Range("B" & GYOU).Value = Sheets(i).Name Range("C" & GYOU).Value = Sheets(i).Range("A" & j).Value Next j Next i End Sub 上記のコードを実行してみてください。 これはヒントですが、これらのコードが理解できればご希望のコードも可能ではないでしょうか。 決して難しいテクニックはありませんが、現状のシートに合わせていく作業が手間取りますし 質問者でなければわからな部分が多数あります。 いずれにしても 日付 担当者名 案件名 ユーザー名・・・ と一枚のシートにひたすら縦方向にデータを入力していくようにしましょう。 上表も月別にシートを分けるのではなく、一枚のデータシートと集計の結果表のシートの2枚に します。 集計の結果表のセルに 年と月を入れるとその年月の集計結果が表示されるようなシートを 考えます。
お礼
ご回答とコード例とありがとうございます。 a1セルを起点にした入力シートが必要ということでしょうか。 事前に調べてもそのパターンばかりでしたので。 シートの制約がある現状では容易くないということですね。
- -9L9-
- ベストアンサー率44% (1088/2422)
VBAでプログラムを組まなければ無理です。シート名取得や意図不明な「or」があるので相当ややこしいプログラムが必要になります。「素人」にできるレベルではないでしょう。 そもそもそんなややこしいことをEXCELのような表計算ソフトでやろうというのが間違いです。集計をやりたいのならデータベースソフトを使うか、最低限EXCELをデータベース管理用に酌むべきです。複数シートに分離していることで自ら集計困難な状態にしています。
お礼
ご回答ありがとうございます。別部署からの依頼で作成者が各々違うので り、ファイル構成の変更は難しいのです。 今の状態ではエクセルにやらせるのが困難だということがよくわかりました。
補足
ご回答ありがとうございます。 1 重複で不要ですが、私が作成者でないのでどうにもなりません。 2 3 これをvbaにやらせるということでしょうか。 実際のデータ量は手作業でやってられない分量です。 かなり面倒なのですね。 それすらわかりませんでした。