If you have used the Split by feature of Power Query to delimit columns, it has a slight limitation.
This feature only delimits to a fixed number of columns by hard coding the number of columns to split into. Later if your values change the split columns remain the same and do not change.. what a bummer!
Let’s solve this
Split by Variable Columns – Video
Consider this tiny data!

- Me and my son’s hobbies
- And yes I’d like to sleep.. a lot
If I Split the Hobbies column by a , (comma) Power Query generates the following code

- The Column names Hobbies.1 to Hobbies.3 are hard coded.
- So if I add a 4th hobby for Rehet, I’ll still get 3 columns and not 4.
- Unless I edit the query manually.
Let’s fix this
Creating a Variable Column List
You should understand the big idea to solve this problem – I want to create a dynamic list that expands or contracts based on maximum number hobbies in the Hobbies Column.
Consider the following highlighted M Code
let
Source = Excel.CurrentWorkbook(){[Name = 'Data']}[Content],
DynamicColumnList = Table.AddColumn(
Source,
'Custom',
each List.Count(Text.PositionOfAny(
[Hobbies],
{','},
Occurrence.All
))
)
in
DynamicColumnList
By using the above code, I get how many commas are there in each row of the hobby column. The results are like this. Obviously if you have 2 commas you have 3 hobbies, so I’ll have to do a + 1 later

To finally get the total number of columns, I slightly revise my code.
let
Source = Excel.CurrentWorkbook(){[Name = 'Data']}[Content],
DynamicColumnList
= List.Max(
Table.AddColumn(Source, 'Custom', each List.Count(
Text.PositionOfAny([Hobbies], {','}, Occurrence.All)
))[Custom]
) + 1
in
DynamicColumnList
Finally convert this into a List of Columns
Consider the additional highlighted part
let
Source = Excel.CurrentWorkbook(){[Name = 'Data']}[Content],
DynamicColumnList = List.Transform({
1..List.Max(
Table.AddColumn(Source, 'Custom', each List.Count(
Text.PositionOfAny([Hobbies], {','}, Occurrence.All)
))[Custom]
) + 1
}, each 'Hobbies.' & Text.From(_))
in
DynamicColumnList
Here are the results.. a dynamic list of columns. Sweet!

Split by Variable Columns
I finally add the Split by step and replace the hard coded column names with my hard work (DynamicColumnList) 🙂
let
Source = Excel.CurrentWorkbook(){[Name = 'Data']}[Content],
DynamicColumnList = List.Transform({
1..List.Max(
Table.AddColumn(Source, 'Custom', each List.Count(
Text.PositionOfAny([Hobbies], {','}, Occurrence.All)
))[Custom]
) + 1
}, each 'Hobbies.' & Text.From(_)),
#'Split Column by Delimiter' = Table.SplitColumn(
Source,
'Hobbies',
Splitter.SplitTextByDelimiter(',', QuoteStyle.Csv),
DynamicColumnList
)
in
#'Split Column by Delimiter'
And this will split to more columns if I add more hobbies for my Son! See this

You can argue, that was a bit of work but that’s the price of automation! As a reward, I’ll never edit this query again 😀
Some more automations in Power Query
- A slightly different approach to the above problem by Oz
- Calculate Age in Years and Months
- Calculate Fiscal Year and Qtr in Power Query
- Make Remove Other Columns Dynamic
- Dynamic Column Names in Power Query
