Reputation: 21
I have a column that is ranged in both letters and numbers that I am trying to expand out into new rows. I also want the entire row within that range number to be duplicated into the new rows. Can it be done in excel?
Original table:
Column A | Column B |
---|---|
A123-A125 | Apples |
B23-B24 | Bananas |
New table:
Column A | Column B |
---|---|
A123 | Apples |
A124 | Apples |
A125 | Apples |
B23 | Bananas |
B24 | Bananas |
Upvotes: 0
Views: 53
Reputation: 60389
Not sure about DAX, but you can do this using Power Query (Transform Data):
(Paste the code below into the Advanced Editor.
Replace the Source
line with your actual data source)
let
Source = Excel.CurrentWorkbook(){[Name="Table15"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Column A", type text}, {"Column B", type text}}),
#"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each
let
#"Split Hyphen" = Text.Split([Column A],"-"),
#"Split Digits" = List.Transform(#"Split Hyphen", each
Splitter.SplitTextByCharacterTransition((c)=>not List.Contains({"0".."9"},c),{"0".."9"})(_)),
#"List Numbers" = List.Numbers(Number.From(#"Split Digits"{0}{1}),
try Number.From(#"Split Digits"{1}{1}) - Number.From(#"Split Digits"{0}{1}) +1 otherwise 1
)
in
List.Transform(#"List Numbers", each #"Split Digits"{0}{0} & Text.From(_)), type {text}),
#"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Column A"}),
#"Expanded Custom" = Table.ExpandListColumn(#"Removed Columns", "Custom"),
#"Reordered Columns" = Table.ReorderColumns(#"Expanded Custom",{"Custom", "Column B"}),
#"Renamed Columns" = Table.RenameColumns(#"Reordered Columns",{{"Custom", "Column A"}})
in
#"Renamed Columns"
Note that the above will also work if Column A
does not contain a range.
Upvotes: 0
Reputation: 6107
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
AddCustomColumn = Table.AddColumn(Source, "ExpandedRange", each let
RangeStart = Text.Middle([Column A], 1, Text.PositionOf([Column A], "-") - 1),
RangeEnd = Text.Middle([Column A], Text.PositionOf([Column A], "-") + 1),
StartNumber = Number.From(Text.Remove(RangeStart, {"A".."Z"})),
EndNumber = Number.From(Text.Remove(RangeEnd, {"A".."Z"})),
Prefix = Text.Remove(RangeStart, {"0".."9"}),
RangeList = List.Transform({StartNumber..EndNumber}, each Prefix & Text.From(_))
in
RangeList),
ExpandColumn = Table.ExpandListColumn(AddCustomColumn, "ExpandedRange"),
RemoveOriginalColumn = Table.RemoveColumns(ExpandColumn, {"Column A"}),
RenameColumns = Table.RenameColumns(RemoveOriginalColumn, {{"ExpandedRange", "Column A"}})
in
RenameColumns
Upvotes: 0