- ベストアンサー
Excel集計表の作成方法とマクロ、VBAの活用
- Excelの集計表の作成方法について教えてください。Accessから出力したデータ(日別、作業別、その件数)を一覧表に変換したいです。マクロやVBAを使ってボタン1つで実行できるようにしたいです。
- Excel集計表作成の手順とは?Accessから出力したデータを元に日別、作業別、件数の一覧表を作成したいのですが、どうすればいいでしょうか?マクロやVBAを使用して効率化したいです。
- Excel集計表作成の方法を教えてください。Accessからのデータを元に日別、作業別、件数の一覧表を作成したいです。マクロやVBAを使って簡単に作成できる方法があれば教えてください。
- みんなの回答 (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
その他の回答 (1)
- don9don9
- ベストアンサー率47% (299/624)
ピボットテーブルではダメなんですか?
お礼
回答ありがとうございます。 ピボットテーブルは最初に考えたんですけど、表の様式が既に決まっており、ピボットテーブルで作成すると更に様式変更の作業が発生するためできません。
お礼
回答ありがとうございます。 かなり複雑そうですね。 とにかく試してみます。