練習問題 - セルに入力されている名前ごとの集計をしてください


マクロを作る練習問題です。もちろん、それ以外に何をしてもいいです。あらかじめワークシートに何かを仕込んでおいたり、ワークシート関数を活用したり。本問題の主旨は、いかに「多くのアプローチを思いつくか」です。1つのマクロを作ればいい、ということではありません。ぜひ、チャレンジしてください。動画の後半で、やり方や考え方、ポイントや注意などを詳しく解説します。

↓左上にあるをクリックすると、チャンネル登録できます。ぜひ、チャンネル登録をお願いします。あなたのチャンネル登録が、私のやる気を維持向上してくれます(笑)

Sub Macro1()
''A列の名前をD列で検索する
    Dim i As Long, A As Range
    Application.ScreenUpdating = False
    For i = 2 To 50001
        Set A = Range("D2:D9").Find(Cells(i, 1))
        A.Offset(0, 1) = A.Offset(0, 1) + Cells(i, 2)
    Next i
    Application.ScreenUpdating = True
End Sub
Sub Macro2()
''E列のセルにあらかじめ名前を設定しておく
    Dim i As Long
    Application.ScreenUpdating = False
    For i = 2 To 50001
        Range(Cells(i, 1)) = Range(Cells(i, 1)) + Cells(i, 2)
    Next i
    Application.ScreenUpdating = True
End Sub
Sub Macro3()
''オートフィルタで絞り込む
    Dim i As Long
    Application.ScreenUpdating = False
    For i = 2 To 9
        Range("A1").AutoFilter 1, Cells(i, 4)
        Cells(i, 5) = WorksheetFunction.Subtotal(9, Range("B:B"))
    Next i
    Range("A1").AutoFilter
    Application.ScreenUpdating = True
End Sub
Sub Macro4()
''SUMIF関数の結果を代入する
    Dim i As Long
    For i = 2 To 9
        Cells(i, 5) = WorksheetFunction.SumIf(Range("A2:A50001"), Cells(i, 4), Range("B2:B50001"))
    Next i
End Sub
Sub Macro5()
''セルにSUMIF関数を代入する
    With Range("E2:E9")
        .Value = "=SUMIF($A$2:$A$50001,D2,$B$2:$B$50001)"
        .Value = .Value
    End With
End Sub

動画で使用したブックのダウンロード(V2020-04-19.xlsm)

Office TANAKAのYouTubeチャンネルはこちら(動画一覧ページ)