Sub BOM_Sum()
Dim rng As Range
Dim ar
Application.ScreenUpdating = False
lr = Cells(Rows.Count, "D").End(xlUp).Row
Set rng = Range("D1:H" & lr)
srow = 4
For r = 1 To lr ' Loop through data
rname = rng(srow, 3) ' Recipe Name
n = Application.WorksheetFunction.CountIf(rng, rname) ' Count rows for is Recipe
nrow = n
lrow = srow + n - 1
ar = Range("D" & srow & ":G" & lrow) ' assign data to work array
ar(1, 4) = 0 ' Set total to zero
Do While nrow >= 2 ' Loop through array ( last to first)
sNo = Len(ar(nrow, 1)) ' length of S.No
Select Case sNo
Case Is = 1 ' single S.No (1,2 3 etc)
first = True
For i = 2 To n
If InStr(1, ar(i, 1), ar(nrow, 1)) > 0 And i <> nrow And Left(ar(i, 1), 1) = ar(nrow, 1) Then
If first Then
ar(nrow, 4) = ar(i, 4)
first = False
Else
ar(nrow, 4) = ar(nrow, 4) + ar(i, 4)
End If
End If
Next i
ar(1, 4) = ar(1, 4) + ar(nrow, 4)
Case Is = 3 'sno of form "x.y"
first = True
For i = 2 To n
If InStr(1, ar(i, 1), ar(nrow, 1)) > 0 And i <> nrow Then ' match to "x.y.z"
If first Then
ar(nrow, 4) = ar(i, 4)
first = False
Else
ar(nrow, 4) = ar(nrow, 4) + ar(i, 4)
End If
End If
Next i
End Select
nrow = nrow - 1
Loop
Range("K" & srow).Resize(UBound(ar, 1), UBound(ar, 2)) = ar 'output results
srow = lrow + 2
r = srow - 1
Next r
Application.ScreenUpdating = True
End Sub
Bookmarks