Вы также можете сделать это с помощью Power Query, доступного в Excel 2010 +
Большинство шагов можно выполнить с помощью пользовательского интерфейса.
Переименование таблицы можно выполнить вручную, но я настроил немного добавьте код на случай, если вы добавите дополнительные столбцы.
Алгоритм
- Отфильтруйте таблицу по значениям> 0
- Групповые строки по
RefID
, с Operation = All Rows
- Добавить пользовательский столбец с формулой
Table.Min([Grouped],"Number")
, чтобы извлечь RefID с наименьшим номером - Развернуть результирующий столбец
- Переупорядочить столбцы в нужном окончательном порядке
- Удалить лишние столбцы
- Переименовать результирующие столбцы.
M-код
Возможно, вам потребуется изменить имя таблицы в Линия 2
let
Source = Excel.CurrentWorkbook(){[Name="refIDtbl"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Number", type number}, {"Location", type text}, {"RefID", type text}}),
#"Filtered Rows" = Table.SelectRows(#"Changed Type", each [Number] >= 0),
#"Grouped Rows" = Table.Group(#"Filtered Rows", {"RefID"}, {{"Grouped", each _, type table [Number=number, Location=text, RefID=text]}}),
#"Added Custom" = Table.AddColumn(#"Grouped Rows", "Custom", each Table.Min([Grouped],"Number")),
#"Expanded Custom" = Table.ExpandRecordColumn(#"Added Custom", "Custom", {"Number", "Location", "RefID"}, {"Custom.Number", "Custom.Location", "Custom.RefID"}),
#"Reordered Columns" = Table.ReorderColumns(#"Expanded Custom",{"RefID", "Grouped", "Custom.Location", "Custom.RefID", "Custom.Number"}),
#"Removed Columns" = Table.RemoveColumns(#"Reordered Columns",{"Grouped", "Custom.RefID"}),
oldColNames = Table.ColumnNames(#"Removed Columns"),
newColNames = List.ReplaceValue(oldColNames,"Custom.","",Replacer.ReplaceText),
#"Renamed Columns" = Table.RenameColumns(#"Removed Columns",List.Zip({oldColNames,newColNames}))
in
#"Renamed Columns"