• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:EXCEL VBA 別シートへデータ集計)

EXCEL VBAでデータ集計を実現する方法

このQ&Aのポイント
  • EXCEL VBAを使用して、[データ]シートにある社員情報を集計して[集計]シートに表示する方法をご教授ください。
  • [データ]シートには4人分の社員情報があります。
  • [集計]シートのフォームは一人につき3行使用し、次の人からも3行ずつ追加していく形式でデータを表示したいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.1

まず社員情報一人分の集計シートのひな形(画像の集計シートのA1からE1の所)を作ってから以下のコードを試してみてください。例示したコードはひな形がデータシートのA1からE3にあるものとしています。社員情報が可変という事なので後ろに継ぎ足していくのではなく実行ごとに集計シートをクリア(AからE列まで削除)し、その後データシートのG列2行目からのデータを毎回転記しています。実行速度は遅いです。 Sub Example() Dim DS As Worksheet, SS As Worksheet Dim i As Integer, j As Long Application.ScreenUpdating = False Set DS = Worksheets("データ シート") Set SS = Worksheets("集計シート") SS.Columns("A:E").Delete Shift:=xlToLeft j = 1 For i = 2 To DS.Cells(Rows.Count, "G").End(xlUp).Row With DS .Range("A1:E3").Copy SS.Cells(j, "A") SS.Cells(j, "A") = .Cells(i, "G") Union(.Cells(i, "H"), .Cells(i, "J"), .Cells(i, "L")).Copy SS.Cells(j, "C").PasteSpecial Paste:=xlPasteValues, Transpose:=True Union(.Cells(i, "I"), .Cells(i, "K"), .Cells(i, "M")).Copy SS.Cells(j, "E").PasteSpecial Paste:=xlPasteValues, Transpose:=True End With j = j + 3 Next Application.CutCopyMode = False Application.ScreenUpdating = True Set DS = Nothing Set SS = Nothing MsgBox "終了", vbInformation End Sub

yakkun2338
質問者

お礼

kkkkkmさん、早速のご連絡ありがとうございます! ご教授いただきましたロジックで実現できました! 本当に助かりました!m( _ _ )m あんなに短いロジックで実現できてしまうのですね。感動しました。 この度は本当にありがとうございました!

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

アウトプットシート側の、出力のための行ポインター変数を j とでも作って、1人分の3行の中で次行にデータを出したいなら j=j+1  してから、 「アウトプットシートのセル番地(Value)=元シートのデータののセル番地(valyue)」 のVBAコードを、セル(=項目)ごとに連ねたら仕舞でしょう。 元シートのデータの行が変割っても、j はそのまま使い続ける(初期化しない)。 質問するほどのことでもない内容のように思う。 ちなみにエクセル関数でも(多少複雑になろうが、どこを参照するかの計算問題であって)できそうな内容でしょう。 コードまで書いてもらうのは質問者の勉強にならない。

yakkun2338
質問者

お礼

imogasiさん、早速のご連絡ありがとうございます! 仰る通りでございます。 わざわざVBAで実施する必要もないかもしれませんし、そもそもロジックを自分で考えなければいつまでたっても身に付かない・・。 本当にその通りです。 ただ断われないオーダーがありまして、どうしてもこのような形でしか出来ないのです。 この度は色々とご指導、ご指摘ありがとうございました。

  • skp026
  • ベストアンサー率45% (1010/2238)
回答No.3

ご存じでしたらごめんなさい。 集計した結果を出すだけでしたら、 wordの差し込み印刷の機能が、 簡単で確実にできます。 印刷時にWindows付属のXPS Document Writerを使うと、 ファイルに落とせます。 どうしてもVBAでなければいけない、 ということでしたら、 以下のサイトが参考になります。 http://excel.style-mods.net

yakkun2338
質問者

お礼

skp026さん、早速のご連絡ありがとうございます! wordの差し込み印刷の機能でできるのですね! 知りませんでした。とても勉強になります!m(_ _)m。 しかし今回はどうしてもVBAでの実装が前提でした。。 VBA参考サイトもご紹介いただきましてありがとうございました! この度は本当に色々と教えていただきましてありがとうございました。

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.2

No1です。 列の削除がまずい場合 SS.Columns("A:E").Delete Shift:=xlToLeft ↓ SS.Columns("A:E").Clear にしてデータだけ削除にください。

yakkun2338
質問者

お礼

kkkkkmさん、ありがとうございました。

関連するQ&A