>>883
> 比較する対象を特定する事は計算式でできない
意味分からん

=IF(COUNTIFS($A:$A,$G1,$B:$B,$H1,$C:$C,$I1)>0,SUMIFS($E:$E,$A:$A,$G1,$B:$B,$H1,$C:$C,$I1)-$K1,"一致データ無し")

この計算式を単純にVBAに置き換えて
With Worksheets("Sheet1")
If WorksheetFunction.CountIfs(.Range(“A:A”), .Range(“G1”), .Range(“B:B”), .Range(“H1”), .Range(“C:C”), .Range(“I1”)) Then
.Range(“L1”) = WorksheetFunction.SumIfs(.Range(“E:E”), .Range(“A:A”), .Range(“G1”), .Range(“B:B”), .Range(“H1”), .Range(“C:C”), .Range(“I1”)) - .Range(“K1”)
Else
.Range(“L1”) = “一致データ無し”
EndIf
End With

行列を変数で指定できるように.Rangeを.Columnsや.Cellsに置き換えて数値で指定できるようにして
With Worksheets("Sheet1")
If WorksheetFunction.CountIfs(.Columns(1), .Cells(1,7), .Columns(2), .Cells(1,8), .Columns(3), .Cells(1,9)) Then
.Cells(1,12) = WorksheetFunction.SumIfs(.Columns(5), .Columns(1), .Cells(1,7), .Columns(2), .Cells(1,8), .Columns(3), .Cells(1,9)) - .Cells(1,11)
Else
.Cells(1,12) = “一致データ無し”
EndIf
End With

あとは必要なところを変数化してループを回せばいいじゃん
Dim rngCell As Range
Dim lngRow As Long ‘ ループを回すため行番号を変数化
With Worksheets("Sheet1")
Set rngCell = .Cells(1, 12)
‘ 表の詳細仕様が分からないのでとりあえずK列が空じゃない限りループ続行
While rngCell.Offset(0, -1) <> “”
lngRow = rngCell.Row
If WorksheetFunction.CountIfs(.Columns(1), .Cells(lngRow,7), .Columns(2), .Cells(lngRow,8), .Columns(3), .Cells(lngRow,9)) Then
rngCell = WorksheetFunction.SumIfs(.Columns(5), .Columns(1), .Cells(lngRow,7), .Columns(2), .Cells(lngRow,8), .Columns(3), .Cells(lngRow,9)) - .Cells(lngRow,11)
Else
rngCell = “一致データ無し”
EndIf
Set rngCell = rngCell.Offset(1, 0) ‘ 次の行
Wend
End With

列の追加削除があるということだったら列番号も変数化すればいい