Forum Discussion
Combine row based on criteria (Product Package)
Hi everyone,
I am currently doing data analysis for my restaurant and got stuck in a process.
I have set of data below:
| Sales Number | Menu Category | Menu Category Detail | Menu | Qty | Price | Subtotal |
| 165932508771 | Food | SS | SSL | 1 | 61600 | 61600 |
| 165932508771 | Extras | S | SL (PACKAGE) | 1 | 0 | 0 |
| 165932508771 | Extras | O | NJ | 1 | 10800 | 10800 |
| 165932508771 | Beverage | T | ETS | 1 | 18700 | 18700 |
| 165932508771 | Extras | O | KP | 1 | 4500 | 4500 |
| 165932508771 | Extras | O | BK | 1 | 2500 | 2500 |
| 165932665478 | Food | SS | SSL | 1 | 61600 | 61600 |
| 165932665478 | Extras | S | SL (PACKAGE) | 1 | 0 | 0 |
| 165932665478 | Extras | O | NJ (PACKAGE) | 1 | 8000 | 8000 |
| 165932665478 | Extras | O | BK | 1 | 2500 | 2500 |
What i want to do is:
1. If menu have "PACKAGE" on its name, combine to the cell above that has no "PACKAGE" on its name
2. The output of the combination will be merge of menu name and sum of subtotal, everything else on the row can be deleted
Here is the example of the output i desired:
| Sales Number | Menu Category | Menu Category Detail | Menu | Qty | Price | Subtotal |
| 165932508771 | Food | SS | SSL;SL | 1 | 61600 | 61600 |
| 165932508771 | Extras | O | NJ | 1 | 10800 | 10800 |
| 165932508771 | Beverage | T | ETS | 1 | 18700 | 18700 |
| 165932508771 | Extras | O | KP | 1 | 4500 | 4500 |
| 165932508771 | Extras | O | BK | 1 | 2500 | 2500 |
| 165932665478 | Food | SS | SSL;SL;NJ | 1 | 69600 | 69600 |
| 165932665478 | Extras | O | BK | 1 | 2500 | 2500 |
My guess it can be done in power query, unfortunately i'm just beginner in that feature.
Please Help.
14 Replies
As an alternative, here is a macro solution.
Sub MergePackage() Dim r As Long Dim n As String Dim s As Double Dim p As Long Application.ScreenUpdating = False r = Range("D" & Rows.Count).End(xlUp).Row Do p = InStr(Range("D" & r), "(PACKAGE)") If p Then Do n = n & ";" & Left(Range("D" & r).Value, p - 1) s = s + Range("G" & r).Value Range("A" & r).Resize(1, 7).Delete Shift:=xlShiftUp r = r - 1 If r = 1 Then Exit Do p = InStr(Range("D" & r), "(PACKAGE)") Loop Until p = 0 Range("D" & r).Value = Range("D" & r).Value & n Range("G" & r).Value = Range("G" & r).Value + s n = "" s = 0 End If r = r - 1 Loop Until r = 1 Application.ScreenUpdating = True End Sub- Riny_van_EekelenPlatinum Contributor
Ryan_Izzan Not particularly proud of this solution (attached) as it looks a bit clumsy. But it seems to work on this small scale. See if it works for you in-real-life.
- Ryan_IzzanCopper ContributorThank you for your response.
Sorry for late response, i just try it today but kinda stuck in "Group" step. it keeps loading and the size reach 1,7 GB and still increasing.
Its my fault that i didn't mention that the table has 23 column and 20.000+ rows. As you mention before, maybe it works on small scale.
Is there any way to solve this problem, or any better solution from my new information
Regards,- Riny_van_EekelenPlatinum Contributor
Ryan_Izzan Difficult to say what's causing it. 20 thousand rows by 23 columns isn't all that spectacular.
Can you upload or share (Onedrive or similar) a larger and more realistic data set? Not all 20000 rows though but include all columns. Anonymize the data if needed.