简体   繁体   中英

How can I convert pivot style data into list data?

I essentially have data arrange like a pivot table in the blue table example and I would like to do a "reverse pivot" to have it formatted as is it in the green table. Its not an actual pivot table but its arranged in the same way. Optimally I would like to just use formulas but if its not possible, what would be the best method in VBA to achieve this? My actual data set is quite large (~350 rows by ~100 columns) and has to be updated constantly so it has to be completely automated. Any guidance is much appreciated!

Example

I've tried a number of built in excel functions but I can't seem to find something that matches my case.

Have you considered "Unpivot" in Excel PowerQuery, as explained in this article ?

This only works if the table is not formatted as an Excel pivot table, otherwise you'll get an error "A table cannot overlap a range that contains a PivotTable report, query results, protected cells, or another table."

Here's an example of data that was previously pivoted:

+--------+------+------+------+
|  SKU   |  1   |  7   |  8   |
+--------+------+------+------+
| 006101 | 0.87 | 0.87 | 0.87 |
| 006309 | 0.87 | 0.87 | 0.87 |
| 006507 | 0.87 | 0.87 | 0.87 |
| 006705 | 0.87 | 0.87 | 0.87 |
+--------+------+------+------+

After loading it into PowerQuery, you select the columns you want to unpivot, then go to "Transform" and select "Unpivot Columns" in the "Any Column" group. I picked columns 1, 7, 8.

This is the resulting M code:

let
    Source = Excel.CurrentWorkbook(){[Name="MyDataSource"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"SKU", type text}, {"1", type number}, {"7", type number}, {"8", type number}}),
    #"Unpivoted Columns" = Table.UnpivotOtherColumns(#"Changed Type", {"SKU"}, "Attribute", "Value"),
    #"Renamed Columns" = Table.RenameColumns(#"Unpivoted Columns",{{"Attribute", "ST"}})
in
    #"Renamed Columns"

And this is the resulting output when you load the data back into Excel (you can also just create a connection in PowerQuery, if you wish to process it further):

+--------+----+-------+
|  SKU   | ST | Value |
+--------+----+-------+
| 006101 |  1 |  0.87 |
| 006101 |  7 |  0.87 |
| 006101 |  8 |  0.87 |
| 006309 |  1 |  0.87 |
| 006309 |  7 |  0.87 |
| 006309 |  8 |  0.87 |
| 006507 |  1 |  0.87 |
| 006507 |  7 |  0.87 |
| 006507 |  8 |  0.87 |
| 006705 |  1 |  0.87 |
| 006705 |  7 |  0.87 |
| 006705 |  8 |  0.87 |
+--------+----+-------+

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM