• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel 集計表の作成)

Excel集計表の作成方法とマクロ、VBAの活用

このQ&Aのポイント
  • Excelの集計表の作成方法について教えてください。Accessから出力したデータ(日別、作業別、その件数)を一覧表に変換したいです。マクロやVBAを使ってボタン1つで実行できるようにしたいです。
  • Excel集計表作成の手順とは?Accessから出力したデータを元に日別、作業別、件数の一覧表を作成したいのですが、どうすればいいでしょうか?マクロやVBAを使用して効率化したいです。
  • Excel集計表作成の方法を教えてください。Accessからのデータを元に日別、作業別、件数の一覧表を作成したいです。マクロやVBAを使って簡単に作成できる方法があれば教えてください。

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

  • ベストアンサー
  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.2

こんにちは。 以下のマクロで、お試しください。 データシートをActiveにしてください。 1行が見出し、A列の日付は日付順にソートされているとして、結果は「Sheet2」へ展開されます。 Const MAXCOL    As Integer = 256 Type rWORK   NM       As String End Type Dim tWORK()     As rWORK Dim WorkCnt     As Integer ' Type rDATE   NM       As String   CNT(MAXCOL)   As Long End Type Dim tDATE()     As rDATE Dim DateCnt     As Integer ' Sub 集計表()   Dim wR   As Long   Dim wC   As Integer   Dim ckDate As String   Dim wI   As Integer   Dim xI   As Integer   Dim c   As Range   Dim eFlg  As Boolean   Dim wsht2 As Worksheet   '   Application.ScreenUpdating = False   Set wsht2 = Worksheets("Sheet2")   Erase tDATE, tWORK   ckDate = "": DateCnt = 0: WorkCnt = 0   '   With ActiveSheet     wR = .Range("A" & Rows.Count).End(xlUp).Row     For Each c In .Range("A2:A" & wR)       '日付チェック及び設定       If ckDate <> c.Value Then         ckDate = c.Value         DateCnt = DateCnt + 1         ReDim Preserve tDATE(DateCnt)         tDATE(DateCnt).NM = c.Value       End If       '       '作業名チェック及び設定       eFlg = False       For wI = 1 To WorkCnt         If tWORK(wI).NM = c.Offset(0, 1) Then           tDATE(DateCnt).CNT(wI) = c.Offset(0, 2)           eFlg = True           Exit For         End If       Next       If eFlg = False Then         WorkCnt = WorkCnt + 1         ReDim Preserve tWORK(WorkCnt)         tWORK(WorkCnt).NM = c.Offset(0, 1)         tDATE(DateCnt).CNT(WorkCnt) = c.Offset(0, 2)       End If     Next     '     '展開     wsht2.Cells(1, 1) = "日付"     For xI = 1 To WorkCnt       wsht2.Cells(1, xI + 1) = tWORK(xI).NM     Next     wR = 1     For wI = 1 To DateCnt       wR = wR + 1       wsht2.Cells(wR, 1) = tDATE(wI).NM       wC = 1       For xI = 1 To WorkCnt         wC = wC + 1         If tDATE(wI).CNT(xI) > 0 Then           wsht2.Cells(wR, wC) = tDATE(wI).CNT(xI)         End If       Next     Next   End With   Application.ScreenUpdating = True End Sub

midoriramram
質問者

お礼

回答ありがとうございます。 かなり複雑そうですね。 とにかく試してみます。

その他の回答 (1)

  • don9don9
  • ベストアンサー率47% (299/624)
回答No.1

ピボットテーブルではダメなんですか?

midoriramram
質問者

お礼

回答ありがとうございます。 ピボットテーブルは最初に考えたんですけど、表の様式が既に決まっており、ピボットテーブルで作成すると更に様式変更の作業が発生するためできません。

関連するQ&A