以上が基本事項です。
プログラミング技術を極めるためにはまだまだ知らなければいけないことがたくさんありますが、今はインターネットのおかげでそれらの情報をいくらでも手に入れることが出来ます。
一方、何事も最良の勉強法は実際にやってみることです。そこで、これ以上の技術説明は以下のサイトを必要に応じて参照していただくとして、次は今までの知識だけでプログラムする方法を考えましょう。
<参考サイト>
プログラミングは次のように進めます
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 SubOption 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