Как рассчитать даты начала и окончания блоков ячеек в Excel 2013? - PullRequest
0 голосов
/ 02 февраля 2020

У меня есть следующая таблица в Excel 2013:

enter image description here

Столбец Даты состоит из последовательных двухнедельных интервалов. Другие столбцы имеют цветные ячейки, которые указывают, когда событие длится для разных адресов. Например, для адреса 2 мероприятие длится с 13.01.2020 по 09.02.2020. Мне нужно преобразовать эту таблицу в таблицу со столбцами:

Start Date | Finish date | Address

Для каждого адреса может быть несколько временных интервалов, в течение которых длится событие, поэтому для каждого адреса может быть несколько строк.

Я могу легко разделить начальную и конечную sh дату каждого 2-недельного интервала с помощью Text to Columns и заполнить цветные блоки числами для облегчения работы с ячейками. Но я не знаю, как посчитать дату начала и длину блоков, чтобы посчитать дату окончания каждого блока. Я уверен, что это можно сделать с помощью некоторого кодирования VBA, но это не самая сильная сторона. Есть ли способ сделать это с помощью встроенной функциональности Excel? Исходная таблица содержит около 50 адресов и 30 двухнедельных интервалов.

Спасибо!

1 Ответ

1 голос
/ 02 февраля 2020

Вы можете сделать это с помощью Power Query, доступного в Excel 2010 +

В Excel 2013, если у вас его нет, вам может потребоваться загрузить бесплатную надстройку Microsoft, чтобы включить ее.

Положите что-нибудь в красные блоки. Я просто использовал букву x, но они должны быть непустыми

  • Выберите ячейку в таблице
  • Данные / Получить и преобразовать / Из таблицы / Диапазон
  • Выберите столбец Даты и Split column by delimiter: -
  • Измените тип по локали
    • вам нужно выбрать Date и локаль формат dd.mm.yy
    • Я выбрал швейцарский эльзасский язык, но есть другие
  • Выберите столбец с двумя датами и Unpivot other columns
  • Затем Group By столбец адреса и для агрегирования
    • Min столбца Dates.1 для даты начала
    • Max столбца Dates.2 для даты окончания
  • Переместите столбцы в окончательный дизайн и переименуйте их при необходимости
  • Сортируйте по столбцу адреса

Все это можно сделать из пользовательского интерфейса

M-код

let
    Source = Excel.CurrentWorkbook(){[Name="Table3"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Dates", type text}, {"Address 1", type text}, {"Address 2", type text}, {"Address 3", type text}, {"Address 4", type text}, {"Address 5", type text}}),
    #"Split Column by Delimiter" = Table.SplitColumn(#"Changed Type", "Dates", Splitter.SplitTextByDelimiter("-", QuoteStyle.Csv), {"Dates.1", "Dates.2"}),
    #"Changed Type with Locale" = Table.TransformColumnTypes(#"Split Column by Delimiter", {{"Dates.1", type date}, {"Dates.2", type date}}, "gsw-CH"),
    #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Changed Type with Locale", {"Dates.1", "Dates.2"}, "Address", "Value"),
    #"Grouped Rows" = Table.Group(#"Unpivoted Other Columns", {"Address"}, {{"Start Date", each List.Min([Dates.1]), type date}, {"Finish Date", each List.Max([Dates.2]), type date}}),
    #"Sorted Rows" = Table.Sort(#"Grouped Rows",{{"Address", Order.Ascending}})
in
    #"Sorted Rows"

enter image description here

Если вам нужно использовать формулы, должно работать следующее:

Разместите свой список Адреса sses in, например G18:Gn

В формулах ниже я определил таблицу и использовал структурированные ссылки, но вы можете использовать обычные ссылки, если вам нужно.

Я также, как и в выше, помещенный x в цветные блоки. В этом случае это должен быть x. Это не может быть просто non-blank

H18: =AGGREGATE(15,6,DATE(MID(Table3[Dates],7,2)+100,MID(Table3[Dates],4,2),LEFT(Table3[Dates],2))*1/(INDIRECT("Table3["&$G18&"]")="x"),1)
I18: =AGGREGATE(14,6,DATE(RIGHT(Table3[Dates],2)+100,MID(Table3[Dates],14,2),MID(Table3[Dates],10,2))*1/(INDIRECT("Table3["&$G18&"]")="x"),1)

И заполнять по мере необходимости.

Вы получаете те же результаты:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...