Excel VBA 事例 演習 基礎問題+α part5

はじめに

来店客数シートに入っているデータから、年代別、時間別にクロス集計表を作る。

問題

来店客数のデータをクロス集計する

問題)来店客数のデータをクロス集計せよ

解答

データ
日付 時刻 年代 客数
2022/10/1 8:00 70代 3
2022/10/1 8:09 60代 2
2022/10/1 8:18 10代 2
2022/10/1 8:23 20代 4
2022/10/1 8:32 30代 4
2022/10/1 8:36 20代 2
2022/10/1 8:41 50代 4
2022/10/1 8:45 20代 1
2022/10/1 8:48 20代 2
2022/10/1 8:55 30代 4
2022/10/1 9:04 50代 3
2022/10/1 9:13 40代 4
2022/10/1 9:17 30代 4
2022/10/1 9:19 50代 4
2022/10/1 9:28 40代 1
2022/10/1 9:31 30代 2
2022/10/1 9:39 40代 4
2022/10/1 9:44 20代 2
2022/10/1 9:48 10代 4
2022/10/1 9:51 50代 4
2022/10/1 9:58 50代 4
2022/10/1 10:04 50代 2
2022/10/1 10:06 20代 2
2022/10/1 10:09 50代 4
2022/10/1 10:18 20代 1
2022/10/1 10:25 20代 1
2022/10/1 10:34 20代 2
2022/10/1 10:38 30代 3
2022/10/1 10:45 50代 3
2022/10/1 10:51 20代 3
2022/10/1 10:54 30代 4
2022/10/1 11:00 40代 3
2022/10/1 11:03 10代 4
2022/10/1 11:08 40代 4
2022/10/1 11:10 50代 1
2022/10/1 11:15 30代 1
2022/10/1 11:16 20代 3
2022/10/1 11:22 40代 2
2022/10/1 11:25 30代 3
2022/10/1 11:30 40代 3
2022/10/1 11:30 50代 2
2022/10/1 11:30 10代 1
2022/10/1 11:33 20代 4
2022/10/1 11:35 40代 4
2022/10/1 11:35 50代 2
2022/10/1 11:37 10代 4
2022/10/1 11:38 50代 3
2022/10/1 11:40 20代 2
2022/10/1 11:42 50代 1
2022/10/1 11:42 50代 1
2022/10/1 11:44 10代 2
2022/10/1 11:46 30代 3
2022/10/1 11:46 40代 1
2022/10/1 11:49 20代 1
2022/10/1 11:51 10代 1
2022/10/1 11:51 30代 2
2022/10/1 11:52 30代 1
2022/10/1 11:53 10代 2
2022/10/1 11:53 30代 1
2022/10/1 11:54 50代 3
2022/10/1 11:55 40代 1
2022/10/1 11:55 30代 1
2022/10/1 11:58 40代 2
2022/10/1 11:58 50代 3
2022/10/1 11:59 10代 4
2022/10/1 12:00 50代 1
2022/10/1 12:02 10代 2
2022/10/1 12:02 10代 1
2022/10/1 12:04 10代 2
2022/10/1 12:06 30代 1
2022/10/1 12:07 30代 3
2022/10/1 12:09 20代 2
2022/10/1 12:09 50代 3
2022/10/1 12:11 20代 1
2022/10/1 12:11 30代 3
2022/10/1 12:12 10代 4
2022/10/1 12:13 20代 2
2022/10/1 12:15 40代 3
2022/10/1 12:15 40代 3
2022/10/1 12:16 10代 3
2022/10/1 12:17 20代 4
2022/10/1 12:20 40代 3
2022/10/1 12:20 10代 2
2022/10/1 12:21 50代 2
2022/10/1 12:22 20代 1
2022/10/1 12:23 40代 4
2022/10/1 12:24 10代 3
2022/10/1 12:25 50代 4
2022/10/1 12:25 50代 4
2022/10/1 12:26 50代 3
2022/10/1 12:27 30代 2
2022/10/1 12:31 30代 4
2022/10/1 12:31 50代 1
2022/10/1 12:31 10代 3
2022/10/1 12:34 50代 3
2022/10/1 12:34 10代 2
2022/10/1 12:36 20代 3
2022/10/1 12:38 40代 1
2022/10/1 12:40 20代 1
2022/10/1 12:42 30代 2
2022/10/1 12:43 20代 3
2022/10/1 12:43 40代 1
2022/10/1 12:43 30代 1
2022/10/1 12:45 20代 1
2022/10/1 12:46 50代 4
2022/10/1 12:47 30代 3
2022/10/1 12:48 20代 2
2022/10/1 12:49 10代 4
2022/10/1 12:49 10代 1
2022/10/1 12:51 50代 3
2022/10/1 12:52 10代 3
2022/10/1 12:52 50代 3
2022/10/1 12:53 50代 2
2022/10/1 12:54 40代 3
2022/10/1 12:55 50代 3
2022/10/1 12:56 20代 1
2022/10/1 12:58 60代 1
2022/10/1 12:58 20代 1
2022/10/1 12:58 10代 2
2022/10/1 13:00 10代 2
2022/10/1 13:01 30代 2
2022/10/1 13:03 30代 4
2022/10/1 13:03 40代 1
2022/10/1 13:07 40代 2
2022/10/1 13:09 10代 4
2022/10/1 13:09 50代 3
2022/10/1 13:10 40代 1
2022/10/1 13:12 30代 3
2022/10/1 13:12 70代 4
2022/10/1 13:14 20代 4
2022/10/1 13:16 40代 2
2022/10/1 13:17 30代 3
2022/10/1 13:18 50代 4
2022/10/1 13:19 10代 1
2022/10/1 13:19 40代 2
2022/10/1 13:21 50代 1
2022/10/1 13:23 10代 3
2022/10/1 13:25 20代 4
2022/10/1 13:25 20代 2
2022/10/1 13:27 30代 4
2022/10/1 13:27 40代 2
2022/10/1 13:27 10代 4
2022/10/1 13:28 30代 1
2022/10/1 13:30 40代 2
2022/10/1 13:30 40代 3
2022/10/1 13:34 10代 4
2022/10/1 13:35 10代 3
2022/10/1 13:42 20代 3
2022/10/1 13:44 20代 3
2022/10/1 13:51 40代 1
2022/10/1 13:52 20代 4
2022/10/1 13:54 10代 2
2022/10/1 14:01 50代 3
2022/10/1 14:06 30代 4
2022/10/1 14:13 20代 1
2022/10/1 14:21 20代 4
2022/10/1 14:24 40代 4
2022/10/1 14:26 50代 1
2022/10/1 14:35 30代 4
2022/10/1 14:43 10代 1
2022/10/1 14:47 40代 2
2022/10/1 14:53 50代 4
2022/10/1 15:02 10代 3
2022/10/1 15:09 20代 2
2022/10/1 15:17 10代 1
2022/10/1 15:22 10代 2
2022/10/1 15:29 40代 3
2022/10/1 15:34 40代 3
2022/10/1 15:36 60代 2
2022/10/1 15:44 30代 2
2022/10/1 15:48 30代 2
2022/10/1 15:56 70代 4
2022/10/1 16:01 30代 1
2022/10/1 16:10 40代 3
2022/10/1 16:13 10代 3
2022/10/1 16:15 50代 4
2022/10/1 16:23 30代 2
2022/10/1 16:32 30代 3
2022/10/1 16:40 50代 3
2022/10/1 16:48 10代 1
2022/10/1 16:52 20代 1
2022/10/1 16:55 10代 4
2022/10/1 16:57 10代 1
2022/10/1 17:02 50代 3
2022/10/1 17:04 30代 4
2022/10/1 17:07 40代 3
2022/10/1 17:12 40代 1
2022/10/1 17:17 50代 1
2022/10/1 17:22 40代 2
2022/10/1 17:29 40代 4
2022/10/1 17:31 40代 3
2022/10/1 17:39 50代 3
2022/10/1 17:41 20代 4
2022/10/1 17:49 40代 2
2022/10/1 17:58 10代 3
2022/10/1 18:05 10代 4
2022/10/1 18:13 20代 2
2022/10/1 18:17 30代 3
2022/10/1 18:20 50代 1
2022/10/1 18:22 30代 2
2022/10/1 18:25 40代 2
2022/10/1 18:34 10代 4
2022/10/1 18:37 30代 3
2022/10/1 18:42 40代 4
2022/10/1 18:45 20代 1
2022/10/1 18:54 30代 2
2022/10/1 18:56 40代 2
2022/10/1 18:59 20代 1
2022/10/1 19:07 40代 1
2022/10/1 19:09 20代 2
2022/10/1 19:11 40代 1
2022/10/1 19:14 30代 3
2022/10/1 19:16 30代 2
2022/10/1 19:18 20代 2
2022/10/1 19:23 30代 2
2022/10/1 19:26 30代 1
2022/10/1 19:33 40代 2
2022/10/1 19:41 30代 1
2022/10/1 19:50 30代 2
2022/10/1 19:55 40代 3
2022/10/1 20:03 20代 1
2022/10/1 20:10 60代 1
2022/10/1 20:17 20代 2
2022/10/1 20:22 30代 4
2022/10/1 20:30 40代 4
2022/10/1 20:39 40代 3
2022/10/1 20:41 10代 1
2022/10/1 20:47 50代 2
2022/10/1 20:52 20代 4
2022/10/1 21:01 10代 1
2022/10/1 21:09 20代 3
2022/10/1 21:14 50代 4
2022/10/1 21:20 50代 2
2022/10/1 21:23 40代 1
2022/10/1 21:30 20代 2
2022/10/1 21:31 30代 1
2022/10/1 21:40 40代 4
2022/10/1 21:43 50代 4
2022/10/1 21:48 70代 1
2022/10/1 21:52 20代 4
2022/10/1 21:55 20代 3
コード

Option Explicit
Option Base 1

Sub main()
    Dim rng As Range
    Dim timedt As String, agedt As String
    
    With Sheets("集計")
        For Each rng In .Range("C3:E6")
            timedt = .Cells(rng.Row, 1).Value
            agedt = .Cells(1, rng.Column).Value
            
            Select Case timedt
                Case "モーニングタイム"
                    Call dataFilter(2, "<11:00")
                Case "ランチタイム"
                    Call dataFilter(2, ">=11:00", "<14:00")
                Case "ティータイム"
                    Call dataFilter(2, ">=14:00", "<17:00")
                Case "ディナータイム"
                    Call dataFilter(2, ">=17:00")
            End Select
            
            Select Case agedt
                Case "若年層"
                    Call dataFilter(3, ">=10代", "<=20代")
                Case "中年層"
                    Call dataFilter(3, ">=30代", "<=50代")
                Case "高齢層"
                    Call dataFilter(3, ">=60代")
            End Select
            
            rng.Value = WorksheetFunction.Subtotal(9, Sheets("来店客数").Columns(4))
            
            Sheets("来店客数").Range("A1").AutoFilter
        
        Next rng
    End With
End Sub

ーーーーーーーーーーーーーーーーーーーーーーー

Sub dataFilter(fld As Integer, terms1 As String, Optional terms2 As String)
    With Sheets("来店客数")
        If terms2 <> "" Then
            .Range("A1").AutoFilter Field:=fld, Criteria1:=terms1, Operator:=xlAnd, Criteria2:=terms2
        Else
            .Range("A1").AutoFilter Field:=fld, Criteria1:=terms1
        End If
    End With
End Sub

コードは以上になる。mainで場合分けをして、サブルーチンに入れている。サブルーチンではautofilterを使って条件を絞り込みを行っているだけである。集計コマンドボタンにはmainを割り当てる。

サイトご利用方法

次のページ・前のページを利用するよりも、グローバルメニュー(ヘッダー部分にある項目)・サブメニュー記事の項目をクリックしていただければ、その項目の全体像が一目でみることができ、クリックすればそのサイトへ飛びます。

google、yahoo、Bingなどで検索する場合、検索ワードは先頭に、孤立じじい、と入力しその後に、グローバルメニュー・サブメニュー記事のどれかひとつの項目を入力すると、その検索サイトが上位表示されます。