Пожалуйста, обратитесь к этой статье , чтобы узнать, как использовать Power Query в вашей версии Excel. Он доступен в Excel 2010 Professional Plus и более поздних версиях . Моя демонстрация использует Excel 2016 .
Шаги:
- Использование из таблицы функция на вкладке
Data
, чтобы добавить свои данные(столбцы с N по Y) в редактор запросов питания; - Используйте функцию Объединить столбцы на вкладке
Transform
, чтобы объединить каждую группу контактов (Name
, Position
, Email
) через точку с запятой ;
. В конце этого упражнения вы должны иметь объединенные столбцы 8 (некоторые столбцы могут содержать пустые ячейки, что хорошо), как показано ниже;
Выделите все объединенные столбцы, используйте
Unpivot Columns на вкладке
Transform
, чтобы отключить эти столбцы, затем удалите столбец
Attribute
, тогда у вас должно получиться что-то вроде ниже;
Выделите столбец
Value
, используйте функцию
Разделить столбцы на вкладке
Transform
, чтобы разделить столбец точкой с запятой
;
;
Переименуйте столбцы по желанию, а затем отфильтруйте второй столбец (который должен быть столбцом имени контакта), чтобы скрыть пробелы; Закройте и загрузите запрос на новый лист (по умолчанию)
Вот запрос мощности M кодов для справки. На всех этапах используются встроенные функции без расширенного кодирования, поэтому они должны быть простыми и понятными. Дайте знать, если у вас появятся вопросы. Ура:)
let
Source = Excel.CurrentWorkbook(){[Name="Table3"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Co Name", type text}, {"Contact1", type text}, {"Pos1", type text}, {"Email1", type text}, {"Contact2", type text}, {"Pos2", type any}, {"Email2", type text}, {"Contact3", type text}, {"Pos3", type any}, {"Email3", type text}, {"Contact4", type text}, {"Pos4", type text}, {"Email4", type text}, {"Contact5", type text}, {"Pos5", type text}, {"Email5", type text}, {"Contact6", type text}, {"Pos6", type text}, {"Email6", type text}, {"Contact7", type text}, {"Pos7", type text}, {"Email7", type text}, {"Contact8", type text}, {"Pos8", type text}, {"Email8", type text}}),
#"Merged Columns" = Table.CombineColumns(#"Changed Type",{"Contact1", "Pos1", "Email1"},Combiner.CombineTextByDelimiter(";", QuoteStyle.None),"Merged"),
#"Merged Columns1" = Table.CombineColumns(Table.TransformColumnTypes(#"Merged Columns", {{"Pos2", type text}}, "en-AU"),{"Contact2", "Pos2", "Email2"},Combiner.CombineTextByDelimiter(";", QuoteStyle.None),"Merged.1"),
#"Merged Columns2" = Table.CombineColumns(Table.TransformColumnTypes(#"Merged Columns1", {{"Pos3", type text}}, "en-AU"),{"Contact3", "Pos3", "Email3"},Combiner.CombineTextByDelimiter(";", QuoteStyle.None),"Merged.2"),
#"Merged Columns3" = Table.CombineColumns(#"Merged Columns2",{"Contact4", "Pos4", "Email4"},Combiner.CombineTextByDelimiter(";", QuoteStyle.None),"Merged.3"),
#"Merged Columns4" = Table.CombineColumns(#"Merged Columns3",{"Contact5", "Pos5", "Email5"},Combiner.CombineTextByDelimiter(";", QuoteStyle.None),"Merged.4"),
#"Merged Columns5" = Table.CombineColumns(#"Merged Columns4",{"Contact6", "Pos6", "Email6"},Combiner.CombineTextByDelimiter(";", QuoteStyle.None),"Merged.5"),
#"Merged Columns6" = Table.CombineColumns(#"Merged Columns5",{"Contact7", "Pos7", "Email7"},Combiner.CombineTextByDelimiter(";", QuoteStyle.None),"Merged.6"),
#"Merged Columns7" = Table.CombineColumns(#"Merged Columns6",{"Contact8", "Pos8", "Email8"},Combiner.CombineTextByDelimiter(";", QuoteStyle.None),"Merged.7"),
#"Unpivoted Columns" = Table.UnpivotOtherColumns(#"Merged Columns7", {"Co Name"}, "Attribute", "Value"),
#"Removed Columns" = Table.RemoveColumns(#"Unpivoted Columns",{"Attribute"}),
#"Split Column by Delimiter" = Table.SplitColumn(#"Removed Columns", "Value", Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv), {"Value.1", "Value.2", "Value.3"}),
#"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Value.1", type text}, {"Value.2", type text}, {"Value.3", type text}}),
#"Renamed Columns" = Table.RenameColumns(#"Changed Type1",{{"Value.1", "Contact"}, {"Value.2", "Position"}, {"Value.3", "Email"}}),
#"Filtered Rows" = Table.SelectRows(#"Renamed Columns", each ([Contact] <> ""))
in
#"Filtered Rows"