populate amounts from lastrow for each separated range for each group

abdo meghari

Well-known Member
Joined
Aug 3, 2021
Messages
726
Office Version
  1. 2019
Hello
I want macro ( don't solution by POWERQUERY) to show amount for each group.
each group contains amount in TOTAL column H for adjacent cell( SELLING NET in column F) .so should brings the GROUP NAME from GROUP/COMPANY: as header for each group in column C and the amount for each GROUP is existed in column H and sum whole amounts for all of groups as show in column C in out sheet.
the OUT sheet will be empty so should create report as I did it with formatting and borders.
at leas I have 500 groups and TOTAL rows could be 8000 rows .
AA
ABCDEFGH
1GROUP/COMPANY: GOMMEST
2ITEMBRAND NODESCRIPTIONUNITQTYSELLING PRICECOSTING PRICETOTAL
31GOMMESTBLUE TR414 100 PCSPIECE25.000.450.333.00
42GOMMESTEUS-65 ROUND PATCH 65X65PIECE10.002.501.5010.00
53GOMMESTP1108 TAIWANPIECE11.005.503.5022.00
64GOMMESTPTO-2301-R 0.6X100MM.PIECE88.001.501.2522.00
75GOMMESTVMTC 7.50-16 V3-02-7PIECE1.0060.0045.0015.00
86GOMMESTHEADER OF PRESSUREPIECE1.004.000.553.45
97GOMMESTLEAD 10GM WIDEPIECE3.000.750.251.50
108GOMMESTLEAD 10GM TIDEPIECE7.000.850.353.50
119GOMMESTLEAD 15GM WIDEPIECE4.000.650.440.84
1210GOMMESTLEAD 15GM TIDEPIECE6.000.950.453.00
1311GOMMESTLEAD 20GM WIDEPIECE7.000.700.461.68
1412GOMMESTLEAD 20GM TIDEPIECE16.000.800.475.28
1513GOMMESTBOAF0-50PIECE210.000.900.4888.20
1614GOMMESTXIA TW-9250 250MLPIECE1.000.950.490.46
17SELLING NET179.91
18
19
20
21GROUP/COMPANY: TIRES
22ITEMBRAND NODESCRIPTIONUNITQTYSELLING PRICECOSTING PRICETOTAL
231TIRESBS 750R16 R230 JAPPIECE10.00450.00400.00500.00
242TIRESBS 750R16 VSJ JAPPIECE8.00750.00700.00400.00
253TIRESBS 1200R20 G580 JAPPIECE2.002,500.002,400.00200.00
264TIRESBS 315/80R22.5 R184 JAPPIECE80.001,950.001,900.004,000.00
275TIRESBS 1400R20 VSJ JAPPIECE1.004,000.003,900.00100.00
286TIRESBS 1200R24 G580 JAPPIECE2.002,800.002,700.00200.00
297TIRESGC 1200R20 AZ026 CHIPIECE2.001,350.001,300.00100.00
308TIRESGC 1200R20 QAZ183 CHIPIECE5.001,450.001,400.00250.00
31SELLING NET5,750.00
32
33
34
35GROUP/COMPANY: BATTERY
36ITEMBRAND NODESCRIPTIONUNITQTYSELLING PRICECOSTING PRICETOTAL
371BATTERYXPRO 70A L KORPIECE1.00350.00300.0050.00
382BATTERYXPRO 70A R KORPIECE2.00300.00250.00100.00
393BATTERYXPRO 90A R KORPIECE2.00425.00400.0050.00
404BATTERYHANKOOK 150A L KORPIECE10.00850.00800.00500.00
415BATTERYASIMCO 150A L KORPIECE1.00750.00700.0050.00
42SELLING NET750.00
43
44SELLING NET TOTAL6,679.91
GROUP
Cell Formulas
RangeFormula
H37:H41,H23:H30,H3:H16H3=(F3-G3)*E3
H17H17=SUM(H3:H16)
H31H31=SUM(H23:H30)
H42H42=SUM(H37:H41)
H44H44=H42+H31+H17



result should be
AA
ABC
1ITEMGROUPSELLING NET
21GOMMEST179.91
32TIRES5,750.00
43BATTERY750.00
5TOTAL6,679.91
out
Cell Formulas
RangeFormula
C5C5=SUM(C2:C4)

thanks
 
Try.
VBA Code:
Sub Main()
    Dim sGROUP As Worksheet
    Set sGROUP = Worksheets("GROUP")
    
    Dim sOUT As Worksheet
    Set sOUT = Worksheets("OUT")
    
    sOUT.Range("A1") = "ITEM"
    sOUT.Range("B1") = "GROUP"
    sOUT.Range("C1") = "SELLING NET"
    
    Dim myCheck As Range
    Set myCheck = sGROUP.Range("C1")
    Do Until myCheck = ""
        i = i + 1
        With sOUT.Range("A1")
            .Offset(i) = i
            .Offset(i, 1) = Split(myCheck, ": ")(1)
            .Offset(i, 2) = myCheck.End(xlDown).Offset(1, 5)
        End With
        Set myCheck = myCheck.End(xlDown).End(xlDown)
    Loop
    
    i = i + 1
    sOUT.Range("A1").Offset(i) = "TOTAL"
    sOUT.Range("A1").Offset(i, 2) = myCheck.End(xlUp).Offset(3, 5)
    
    sbFormat sOUT
End Sub

Sub sbFormat(sOUT As Worksheet)
    With sOUT.Range("A1").CurrentRegion
        .Font.Size = 10
        .Borders.LineStyle = xlContinuous
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .Resize(1).Font.Bold = True
        .Resize(, 1).Offset(0, 2).Style = "Comma"
    End With
    sOUT.Range("A" & Rows.Count).End(xlUp).Font.Bold = True
    
    sOUT.Columns("A:C").EntireColumn.AutoFit
End Sub
 
Upvote 0
Code:
Sub test()
    Dim i&, x, ws As Worksheet
    Set ws = Sheets("out")
    ws.[a1].CurrentRegion.Clear
    With Sheets("group")
        x = Application.VLookup("SELLING NET TOTAL", .Columns("f:h"), 3, False)
        With .Columns("a").SpecialCells(2, 1).Areas
            For i = 1 To .Count
                ws.Cells(i + 1, 1).Resize(, 3) = Array(i, .Item(i)(1)(1, 2), .Item(i)(.Item(i).Count + 1)(1, 8))
            Next
        End With
    End With
    With ws.[a1].CurrentRegion.Resize(, 3)
        Union(.Rows(1), .Columns("a:b")).HorizontalAlignment = xlCenter
        .Rows(1) = [{"ITEM","GROUP","SELLING NET"}]
        If Not IsError(x) Then
            .Cells(.Rows.Count + 1, 1).Resize(, 3) = Array("TOTAL", Empty, x)
            Union(.Rows(1), .Cells(.Rows.Count + 1, 1)).Font.Bold = True
        End If
        .Resize(.Rows.Count + IIf(Not IsError(x), 1, 0)).Borders.Weight = 2
        .EntireColumn.AutoFit
    End With
End Sub
 
Upvote 0
Solution
Try.
VBA Code:
Sub GetGroups()
Dim Ro1, Ro2, k
Dim LR&, T&
Sheets("GROUP").Activate
LR = Range("A" & Rows.Count).End(xlUp).Row + 1
k = "transpose(IF(Isnumber(Find(""GROUP"",GROUP!C1:C" & LR & ")),row(C1:C" & LR & "),false))"
Ro1 = Filter(Evaluate("transpose(IF(Isnumber(Find(""GROUP"",GROUP!C1:C" & LR & ")),row(C1:C" & LR & "),false))"), False, False)
Ro2 = Filter(Evaluate("transpose(IF(Isnumber(Find(""SELLING NET"",GROUP!F1:F" & LR & ")),row(F1:F" & LR & "),false))"), False, False)
ReDim B(0 To UBound(Ro1), 1 To 2)
For T = 0 To UBound(Ro1)
B(T, 1) = Replace(Range("C" & Ro1(T)).Value, "GROUP/COMPANY:", "")
B(T, 2) = Range("H" & Ro2(T))
Next T

Sheets("OUT").Delete
Sheets.Add.Name = "OUT"

With Sheets("OUT")
.Range("A1:B1") = Array("GROUP/COMPANY", "TOTAL")
.Range("A2").Resize(UBound(Ro1) + 1, 2) = B
.Range("A1").CurrentRegion.Borders.LineStyle = xlContinuous
End With

End Sub
 
Upvote 0
HongRu & Fuji both codes are great !
@Fuji
How should show "#,##0.00" for amount in TOTAL row,please?
many thanks for your help.
 
Last edited:
Upvote 0
Try.
VBA Code:
Sub GetGroups()
Dim Ro1, Ro2, k
Dim LR&, T&, X&
Dim TotAmt#
Application.DisplayAlerts = False
Sheets("GROUP").Activate
LR = Range("A" & Rows.Count).End(xlUp).Row + 1
k = "transpose(IF(Isnumber(Find(""GROUP"",GROUP!C1:C" & LR & ")),row(C1:C" & LR & "),false))"
Ro1 = Filter(Evaluate("transpose(IF(Isnumber(Find(""GROUP"",GROUP!C1:C" & LR & ")),C1:C" & LR & ",false))"), False, False)
Ro2 = Filter(Evaluate("transpose(IF(Isnumber(Find(""SELLING NET"",GROUP!F1:F" & LR & ")),H1:H" & LR & ",false))"), False, False)
ReDim B(0 To UBound(Ro1) + 1, 0 To 2)
For T = 0 To UBound(Ro1)
X = X + 1: B(T, 0) = X
B(T, 1) = Replace(Ro1(T), "GROUP/COMPANY:", "")
B(T, 2) = Ro2(T)
TotAmt = TotAmt + Ro2(T)
Next T

Sheets("OUT").Delete
Sheets.Add.Name = "OUT"

With Sheets("OUT")
.Range("A1:C1") = Array("ITEM", "GROUP/COMPANY", "SELLING NET")
.Range("A2").Resize(UBound(Ro1) + 1, 3) = B
.Range("A2").Resize(UBound(Ro1) + 1, 1).HorizontalAlignment = xlCenter
.Range("A1").Offset(UBound(Ro1) + 2, 1).Resize(1, 2) = Array("TOTAL", TotAmt)
.Range("A1").CurrentRegion.Borders.LineStyle = xlContinuous
.Range("A1").CurrentRegion.Columns.AutoFit
End With
Application.DisplayAlerts = True
End Sub
 
Last edited:
Upvote 0
Insert one line
Rich (BB code):
        End If
        .Resize(.Rows.Count + 1).Columns(3).NumberFormatLocal = "#,#.00"   '<--- this line
        .Resize(.Rows.Count + IIf(Not IsError(x), 1, 0)).Borders.Weight = 2
 
Upvote 0

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top