以上が基本事項です。
プログラミング技術を極めるためにはまだまだ知らなければいけないことがたくさんありますが、今はインターネットのおかげでそれらの情報をいくらでも手に入れることが出来ます。
一方、何事も最良の勉強法は実際にやってみることです。そこで、これ以上の技術説明は以下のサイトを必要に応じて参照していただくとして、次は今までの知識だけでプログラムする方法を考えましょう。
<参考サイト>
プログラミングは次のように進めます
Option Explicit Sub 売上集計() Dim RowMax As Long Dim I As Long Dim 得意先コード As String Dim 担当者コード As Integer Dim 読出行 As Long Dim 書出行 As Long Dim 金額 As Double '最大行検出 For I = 2 To RowMax 得意先コード = Cells(I, 4).Value 担当者コード = Cells(I, 2).Value If 得意先コード <> Cells(I + 1, 4).Value Then '得意先コードが違う --> 集計結果書出し '書出行番号カウントアップ 書出行 = 書出行 + 1 '金額リセット ElseIf 担当者コード <> Cells(I + 1, 2).Value Then '担当者コードが違う --> 集計結果書出し '書出行番号カウントアップ '金額リセット Else '得意先も担当者も同じ --> 金額カウントアップ End If '読出行番号カウントアップ Next I End Sub
Option Explicit Sub 売上集計() Dim RowMax As Long Dim 得意先コード As String Dim 担当者コード As Integer Dim 読出行 As Long Dim 書出行 As Long Dim 金額 As Double '最大行検出 RowMax = Cells(Rows.Count, 1).End(xlUp).Row 書出行 = 2 For 読出行 = 2 To RowMax 得意先コード = Cells(読出行, 4).Value 担当者コード = Cells(読出行, 2).Value If 得意先コード <> Cells(読出行 + 1, 4).Value Then '得意先コードが違う --> 集計結果書出し Call 集計結果書出し(書出行, 金額) '書出行番号カウントアップ 書出行 = 書出行 + 1 '金額リセット 金額 = 0 ElseIf 担当者コード <> Cells(読出行 + 1, 2).Value Then '担当者コードが違う --> 集計結果書出し Call 集計結果書出し(書出行, 金額) '書出行番号カウントアップ 書出行 = 書出行 + 1 '金額リセット 金額 = 0 Else '得意先も担当者も同じ --> 金額カウントアップ 金額 = 金額 + Cells(読出行, 8).Value End If '読出行番号カウントアップ Next 読出行 End Sub Sub 集計結果書出し(I, 金額) End Sub
Option Explicit Public 読出行 As Long Public 書出行 As Long Public 金額 As Double Sub 売上集計() Dim RowMax As Long Dim 得意先コード As String Dim 担当者コード As Integer '最大行検出 RowMax = Cells(Rows.Count, 1).End(xlUp).Row 'グループ、担当者コード、得意先コード順にソーティング ActiveWorkbook.Worksheets(出力タブ).Sort.SortFields.Clear ActiveWorkbook.Worksheets(出力タブ).Sort.SortFields.Add Key:=Range("A2:A" & RowMax) _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets(出力タブ).Sort.SortFields.Add Key:=Range("B2:B" & RowMax) _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets(出力タブ).Sort.SortFields.Add Key:=Range("D2:D" & RowMax) _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets(出力タブ).Sort .SetRange Range("A1:J" & RowMax) .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With 書出行 = 2 金額 = 0 For 読出行 = 2 To RowMax 得意先コード = Cells(読出行, 4).Value 担当者コード = Cells(読出行, 2).Value If 得意先コード <> Cells(読出行 + 1, 4).Value Then '得意先コードが違う --> 集計結果書出し Call 集計結果書出し ElseIf 担当者コード <> Cells(読出行 + 1, 2).Value Then '担当者コードが違う --> 集計結果書出し Call 集計結果書出し Else '得意先も担当者も同じ --> 金額カウントアップ 金額 = 金額 + Cells(読出行, 8).Value End If '読出行番号カウントアップ Next 読出行 '不要行削除 Rows(CInt(書出行) & ":" & RowMax).Select Selection.Delete Shift:=xlUp End Sub Sub 集計結果書出し() Dim I As Integer 金額 = 金額 + Cells(読出行, 8).Value For I = 1 To 10 Cells(書出行, I).Value = Cells(読出行, I).Value Next I Cells(書出行, 8).Value = 金額 '書出行番号カウントアップ 書出行 = 書出行 + 1 '金額リセット 金額 = 0 End Sub