Следующее решение использует Power Query , который доступен в Excel 2010 Professional Plus и во всех более поздних версиях Excel. Моя демонстрация использует Excel 365 .
Предположим, у вас есть две таблицы:
- Table1 называется Tbl_Visitday , который является 2-столбцомтаблица в вашем примере;
- Таблица2 называется Rng_Obligated , которая представляет собой таблицу из 1 столбца, содержащую все обязательные дни.
- Перейдите на вкладку
Data
на ленте Excel, используйте функцию Из таблицы , чтобы добавить обе таблицы в редактор мощных запросов одну за другой. При первом доступе к редактору убедитесь, что настроили Query Options
, как показано ниже, чтобы не загружать каждый запрос на новый лист;
После добавления обеих таблиц в редактор создайте дубликат
Tbl_Visitday
в разделе
Queries
слева, как показано ниже:
Давайте сначала поработаем с
Rng_Obligated
, выделим столбец, используем функцию
Транспонирование на вкладке
Transform
, чтобы транспонировать данные из строк в столбцы, а затем используем функцию
Слияние столбцов чтобы объединить все столбцы точкой с запятой
;
, тогда у вас должно получиться что-то вроде следующего:
Давайте перейдем к
Tbl_Obligated(2)
, удалим столбец
Visitday
, удалим дубликаты в столбце
ID
и отсортируем их по возрастанию, тогда у вас должно быть:
Используйте
Добавить функцию запросов на вкладке
Home
, чтобы добавить таблицу
Rng_Obligated
к текущей таблице, а затем щелкните правой кнопкой мыши заголовок столбца
Merged
и выберите
Заполнить -> Вверх , чтобы быстро заполнить объединенный столбец той же строкой, тогда у вас должно быть что-то вроде следующего:
Отфильтровал столбец
ID
, чтобы скрыть
null
, затем используйте функцию
Разделить столбцы на вкладке
Transform
, чтобы разделить столбец
Merged
на точку с запятой
;
и врасширенные опции для выбора, чтобы поместить результаты в
Строки , как показано ниже:
Используйте функцию
Объединить запросы на вкладке
Home
, чтобы объединить таблицу
Tbl_Visitday
с текущей таблицей, удерживая клавишу
Ctrl и последовательно выбирая первый и второй столбцы в каждомтаблица, как показано ниже:
Разверните новый столбец слияния, чтобы показать только
Visitday
столбец, добавьте
пользовательский столбец , используя эту формулу
=[Merged]=[Visitday]
, затем отфильтруйте столбец
Custom
, чтобы показать только
FALSE
результаты, затем выдолжно иметь:
Измените формат столбца
Merged
на
Text
, затем используйте функцию
Группировать по на вкладке
Transform
, чтобы сгруппировать столбец
Merged
по
ID
, как показано ниже,результат будет
error
, что ожидается:
Вернитесь к последнему шагу в разделе
APPLIED STEPS с правой стороны, перейдите на панель формул и замените эту часть формулы
List.Sum([Merged])
на
Text.Combine([Merged],",")
, нажмите
введите , и вы увидите, что
error
стал текстовой строкой, как показано ниже:
Вы можете закрыть и загрузить запрос, который будет создан как соединение, если вы изменили настройку запроса на первом шаге. Вы можете нажать
Запросы и подключения на вкладке
Data
, щелкнуть правой кнопкой мыши запрос и выбрать его для загрузки в определенное место в своей книге.
В вашем случае вам нужно будет попросить владельца общей рабочей книги разблокировать рабочую книгу, чтобы вы могли использовать редактор силовых запросов и загрузить выходные данные. В качестве альтернативы вы можете скопировать и вставить данные в новую рабочую книгу, где вы можете выполнить запрос питания для получения результата.
Power Query позволяет обновлять исходные таблицы и пересчитывать выходные данные (если вы решили обновитьданные) в фоновом режиме, как правило, в течение нескольких секунд. Если вы не хотите, чтобы вывод обновлялся, вы можете скопировать и вставить вывод в новую таблицу, чтобы результаты остались без изменений.
Вот запрос мощности M Code для двух таблиц для вашей справки. Дайте знать, если у вас появятся вопросы. Приветствия:)
Rng_Obligated
let
Source = Excel.CurrentWorkbook(){[Name="Rng_Obligated"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"obligated", Int64.Type}}),
#"Transposed Table" = Table.Transpose(#"Changed Type"),
#"Merged Columns" = Table.CombineColumns(Table.TransformColumnTypes(#"Transposed Table", {{"Column1", type text}, {"Column2", type text}, {"Column3", type text}, {"Column4", type text}, {"Column5", type text}, {"Column6", type text}, {"Column7", type text}}, "en-AU"),{"Column1", "Column2", "Column3", "Column4", "Column5", "Column6", "Column7"},Combiner.CombineTextByDelimiter(";", QuoteStyle.None),"Merged")
in
#"Merged Columns"
Tbl_Visitday (2)
let
Source = Excel.CurrentWorkbook(){[Name="Tbl_Visitday"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"ID", type text}, {"Visitday", type text}}),
#"Removed Columns" = Table.RemoveColumns(#"Changed Type",{"Visitday"}),
#"Removed Duplicates" = Table.Distinct(#"Removed Columns"),
#"Sorted Rows" = Table.Sort(#"Removed Duplicates",{{"ID", Order.Ascending}}),
#"Appended Query" = Table.Combine({#"Sorted Rows", Rng_Obligated}),
#"Filled Up" = Table.FillUp(#"Appended Query",{"Merged"}),
#"Filtered Rows" = Table.SelectRows(#"Filled Up", each ([ID] <> null)),
#"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(#"Filtered Rows", {{"Merged", Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Merged"),
#"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Merged", Int64.Type}}),
#"Merged Queries" = Table.NestedJoin(#"Changed Type1",{"ID", "Merged"},Tbl_Visitday,{"ID", "Visitday"},"Table6",JoinKind.LeftOuter),
#"Expanded Table6" = Table.ExpandTableColumn(#"Merged Queries", "Table6", {"Visitday"}, {"Visitday"}),
#"Added Custom" = Table.AddColumn(#"Expanded Table6", "Custom", each [Merged]=[Visitday]),
#"Filtered Rows1" = Table.SelectRows(#"Added Custom", each ([Custom] = false)),
#"Changed Type2" = Table.TransformColumnTypes(#"Filtered Rows1",{{"Merged", type text}}),
#"Grouped Rows" = Table.Group(#"Changed Type2", {"ID"}, {{"MissedDay", each Text.Combine([Merged],","), type text}})
in
#"Grouped Rows"