Вы также можете сделать это с помощью PowerQuery. Шаги следующие:
- Объединить столбцы name1 и perc1, name2 & perc2, name3 & perc3, используя разделитель (скажем, equalsign ). Теперь у вас осталось 4 столбца.
- Щелкните правой кнопкой мыши столбец [код] и выберите
Unpivot Other Columns
- Щелкните правой кнопкой мыши по столбцу [Атрибут] и выберите
Remove
- Щелкните правой кнопкой мыши по столбцу [Значение] и выберите
Split Columns
=> By Delimeter
=> OK
- Использование выпадающего меню в столбце [Value.2]: отменить выбор нулевых значений.
- Переименовать столбец [Value.1] и [Value.2]
- Нажмите
Close & Load
Это результат в PowerQuery (непосредственно перед шагом 7)
И это сгенерированный скрипт из Расширенного редактора:
let
Source = Excel.CurrentWorkbook(){[Name="Table"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"code", Int64.Type}, {"name1", type text}, {"perc1", Int64.Type}, {"name2", type text}, {"perc2", Int64.Type}, {"name3", type text}, {"perc3", Int64.Type}}),
#"Merged Columns" = Table.CombineColumns(Table.TransformColumnTypes(#"Changed Type", {{"perc1", type text}}, "en-US"),{"name1", "perc1"},Combiner.CombineTextByDelimiter("=", QuoteStyle.None),"Merged"),
#"Merged Columns1" = Table.CombineColumns(Table.TransformColumnTypes(#"Merged Columns", {{"perc2", type text}}, "en-US"),{"name2", "perc2"},Combiner.CombineTextByDelimiter("=", QuoteStyle.None),"Merged.1"),
#"Merged Columns2" = Table.CombineColumns(Table.TransformColumnTypes(#"Merged Columns1", {{"perc3", type text}}, "en-US"),{"name3", "perc3"},Combiner.CombineTextByDelimiter("=", QuoteStyle.None),"Merged.2"),
#"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Merged Columns2", {"code"}, "Attribute", "Value"),
#"Removed Columns" = Table.RemoveColumns(#"Unpivoted Other Columns",{"Attribute"}),
#"Split Column by Delimiter" = Table.SplitColumn(#"Removed Columns", "Value", Splitter.SplitTextByDelimiter("=", QuoteStyle.Csv), {"Value.1", "Value.2"}),
#"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Value.1", type text}, {"Value.2", Int64.Type}}),
#"Filtered Rows" = Table.SelectRows(#"Changed Type1", each ([Value.2] <> null)),
#"Renamed Columns" = Table.RenameColumns(#"Filtered Rows",{{"Value.1", "Name1"}, {"Value.2", "Perc1"}})
in
#"Renamed Columns"