- 締切済み
同一Book内の複数のsheetから日付を基準に情報を抽出して集計
各先生方 いつも大変お世話になっております。 複数の車両が日毎に走行した際の情報を月末に集計する作業をしております。 一定範囲のセルを複数のsheetからコピーしている単純作業なのですが、稼働日数が多くなると想像以上に時間が掛かり、本業が疎かになるため困っております。 内容はA車、B車、C車、D車、E車、F車、G車なる7台の走行情報をそれぞれ車両毎にsheet分けし、“○○月集計sheet”と共にBook名「○○月車両情報」内に収めております。 1月を例に・・・ Book名「1月車両情報.xls」 → “1月集計sheet”、“A車sheet” ・・・ “G車sheet” sheet内の各列記載区分は共通で以下のようにしております。 B列:日付|C列:運行車両|D列:運行者名|E列:ルート記号|F列:距離 1/1 (例)A車 (例)Aさん (例)B (例)185 1/2 ・ ・ ・ 1/31(未稼働日は日付も空欄) ※A2セルからA32セルまで1~31の数字が記載されております。 ※全てのsheet共通で1行目はタイトル、2行目から32行目(31日分)までが運行情報となります。 各車両の運行はそれぞれが日毎に異なり、毎日稼動している訳ではありませんので、稼動していない日はB~Fまで全てのセルが空欄です。 日付情報を基準にB~Fまでの運行情報を一括集計したく望んでおります。 例えば、B車、C車、F車の3台が1月1日に稼動、A車、D車の2台が1月4日にそれぞれ稼動した際、各車両sheet内のA列に記載された「1/1」の日付情報を元に日付を含むB~Fの対象セルが1月集計sheetへ反映されるコードを求めております。 尚、集計sheetへは日付の若い順に上部セルへ反映させたいので、「1/4」の日付情報を含むA車、D車の情報(B~Fの対象セル)はB車、C車、F車の情報の下部に集計させたく望みます。 車両区分のABCには序列を設けませんので、同じ日付の中で順序が変わっても問題ありません。 また、現状では7台の車両で運行しておりますが、今後、台数が増えることも予測されますので、数量変更にも対応していると助かります。 何方様かご教授宜しくお願い致します。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- end-u
- ベストアンサー率79% (496/625)
集計したいシートを[Shift]キーや[Ctrl]キーを押しながら全て選択してA2:F32を選択。 (集計対象シートそれぞれを選択した時、A2:F32セルがアクティブになります) 1番目のシートを選択して[コピー]。 集計Sheetのコピー先を選択して[貼り付け]。 2番目のシートを選択して[コピー]。 集計Sheetのコピー先を選択してて[貼り付け]。 : 以下繰り返し。 で、とにかく1シートに全てコピーし集約するだけですよね? それに月1回の作業ですし。『本業が疎かになる』ほど時間がかかるとも思えませんが。 一応、集計対象シート全て選択して以下マクロを実行すれば新規シートに集約します。 Sub Macro1() Dim wss As Sheets Dim ws As Worksheet Dim s As Worksheet Set wss = ActiveWindow.SelectedSheets wss.Item(1).Select Set s = Sheets.Add wss.Item(1).Range("A1:F1").Copy s.Range("A1") For Each ws In wss ws.Range("A2:F32").Copy s.Range("A65536").End(xlUp).Offset(1) Next Set s = Nothing Set wss = Nothing End Sub 後は、[並べ替え]や[オートフィルタ]を使って不要行を削除とか。 また、必要であればピボットテーブルを使えば柔軟に集計できます。 ...ですが、そもそも『C列:運行車両』とあるように、車両情報を入力するようにしているわけですから シートを分けずに1シートに入力すれば集約作業さえも不要です。 運行車両ごとに印刷したりする場合は、それこそ[並べ替え]や[オートフィルタ]を使って印刷すれば良いわけですし。
お礼
とても良いヒントになりました。 手法を変え、改めて質問し直します。 有難うございました。