Создание столбца информации из таблицы предметов, задач и дат - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть большая коллекция элементов в электронной таблице, с которыми связаны различные задачи. Каждый элемент представляет собой строку, а различные задачи - столбцы. Для каждого элемента и задачи есть дата, когда задача должна быть выполнена. (Если запись пуста, то для этого элемента не нужно выполнять задачу.)

Пример таблицы приведен здесь: https://docs.google.com/spreadsheets/d/1jzla_gMw_soVqW7OR3dSsT7Sd9zDYu-oSpdm5HeOzEs/edit?usp=sharing

Можно ли преобразовать таблицу в один список, в котором есть даты, элемент и задание (а записи в списке упорядочены по дате)? Строки / столбцы будут добавлены со временем.

Current Table

         task1,      task2,      task3
      -------------------------------------
item1 |  1/20/2019   2/20/2020  
item2 |              2/23/2020   3/10/2019
item3 |  4/10/2020               5/10/2020

Expected output:

1/20/2019, item1, task1
3/10/2019, item2, task3
2/20/2020, item1, task2
2/23/2020, item2, task2
4/10/2020, item3, task1
5/10/2020, item3, task3

Ответы [ 2 ]

0 голосов
/ 08 сентября 2018

Если вы хотите, чтобы дата, элемент и задание находились в отдельных столбцах, плз попробуйте

=ArrayFormula(sort(split(transpose(split(textjoin("¶",true,if(C5:E7="","",C5:E7&"|"&B5:B7&"|"&C4:E4)),"¶")),"|"),1,true))

Мне пришлось вручную отформатировать первый столбец в виде даты мм / дд / гг. Можно было бы использовать функцию TEXT для форматирования даты в виде строки как части формулы, но тогда ее нельзя было использовать для сортировки. Вы можете добавить исходную (неформатированную) дату в отдельный столбец и отсортировать по ней, но это значительно усложнит формулу.

enter image description here

0 голосов
/ 07 сентября 2018

В терминах базы данных операция, которую вы хотите сделать, называется нормализацией. Вы можете сделать это, используя пару ARRAYFORMULAS, например:

Сначала создайте список всех возможных комбинаций значений вертикальной (B5: B7) и горизонтальной (C4: E4) оси и введите, скажем, A10

=arrayformula(
  split(
    transpose(
      split(
        concatenate(
          arrayformula(
            unique(filter(B5:B7, not(isblank(B5:B7)))) & "|" &
            unique(filter(C4:E4, not(isblank(C4:E4)))) & "\"
          )
        ),
      "\")
    ),
    "|")
  )

Используйте значения измерений, чтобы найти даты в таблице и поместить их в C10

=arrayformula(
   text(vlookup(A10:A18, $B$4:$E$7, match(B10:B18, $C$4:$E$4, 0)+1, false), "MM/DD/YYYY")
)

enter image description here Примечания:

  1. Преобразование в text () на самом деле не нужно, но избавляет от необходимости форматировать ячейки. Если вам нужны значения даты как даты, удалите текст и отформатируйте полученный столбец как дату.
  2. Чтобы сделать все это открытым, просто оставьте диапазоны открытыми на одном конце (например, A10: A вместо A10: A18), но затем вам придется немного усложнить формулы, чтобы позаботиться об обработке ошибок
  3. Если вы предпочитаете решение на основе сценариев, ниже приведен (довольно не элегантный) пример того, как это можно сделать. Нормализация (переформатирование) данных перекрестных таблиц для Таблицы без использования Excel
  4. Я ставлю даты как последний столбец, а не как первый, потому что в денормализованных таблицах принято ставить ключи первыми, а значения - позже. Отменить заказ тривиально.
  5. Даты 1899 года - это, конечно, пустые ячейки таблицы. Опять же, я оставляю читателю обработку ошибок в качестве упражнения: -)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...