VBA プログラミング Withで同じオブジェクト名を省略

目安時間:約 4分

今回は、「酒店舗別」「分類別」で集計を行います。
Withの使い方を理解して頂きたいです。
【課題】
シート「Sheet1」、「Sheet1_回答」を用意します。
シート「Sheet1」には、「酒店舗」「分類」「売上」を記載します。
シート「Sheet1_回答」には、シート「Sheet1」の酒店舗・分類別に売上を集計する。
※前提条件 シート「Sheet_回答」には、すべての酒店舗と分類が必ずあるとします。

【VBA】

Sub syukei_Clic()
    Dim i As Long
    Dim ixR As Long
    Dim ixC As Long
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    Set ws1 = Worksheets("Sheet1")
    Set ws2 = Worksheets("Sheet1_回答")
    ws2.Range("A1").CurrentRegion.Offset(1, 1).ClearContents
    With ws1
        For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
            ixC = 2
            Do Until ws2.Cells(1, ixC) = .Cells(i, 1)
                ixC = ixC + 1
            Loop
            ixR = 2
            Do Until ws2.Cells(ixR, 1) = .Cells(i, 2)
                ixR = ixR + 1
            Loop
            ws2.Cells(ixR, ixC) = ws2.Cells(ixR, ixC) + .Cells(i, 3)
        Next
    End With
End Sub


簡単な説明
ws2.Range("A1").CurrentRegion.Offset(1, 1).ClearContents
・初期クリアーします
「With ws1」〜「End With」は「Sheet1」について処理を行う。
・「.Cells」、「.Rows.Count」については、「ws1.Cells」、「ws1.Rows.Count」を意味します。
・これが、「同じオブジェクト名を省略」ということになります。
「Do Until ws2.Cells(1, ixC) = .Cells(i, 1)」はループ処理を行う。
・「Sheet1」の酒店舗から「Sheet1_回答」と同じ酒店舗を探す。
「Do Until ws2.Cells(ixR, 1) = .Cells(i, 2)」はループ処理を行う。
・「Sheet1」の酒名から「Sheet1_回答」と同じ酒名を探す。
「ws2.Cells(ixR, ixC) = ws2.Cells(ixR, ixC) + .Cells(i, 3)」は、売上合計を算出する。
・「Sheet1」の各酒店舗、各酒名の売上を、「Sheet1_回答」に設定する。

あなたのお役に立てるなら、コピーして使用してください。

今後も勉強した内容を記載して行きますので、お役に立てるものがあれば使ってください。

VBA開発もしておりますので開発のご要望があればご連絡をください。

VBA開発依頼受付はこちらから

プロフィール

50歳、派遣社員。いつもいつも派遣切りにビクビクしながら生きています。50歳という大台を迎えると派遣先がほとんどなく、次の派遣先は無いに等しい。でも、家庭を支えなければならない。だから私は、複数の仕事が出来るように在宅ワークが出来るプログラミング、ブログを選択。50歳からフリーランスを目指してプログラミング、ブログを始めました。

私と一緒に始めませんか?

お問い合わせ
プログラミング依頼

 

最近の投稿
アーカイブ

ページの先頭へ