В терминах базы данных операция, которую вы хотите сделать, называется нормализацией. Вы можете сделать это, используя пару 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")
)
Примечания:
- Преобразование в text () на самом деле не нужно, но избавляет от необходимости форматировать ячейки. Если вам нужны значения даты как даты, удалите текст и отформатируйте полученный столбец как дату.
- Чтобы сделать все это открытым, просто оставьте диапазоны открытыми на одном конце (например, A10: A вместо A10: A18), но затем вам придется немного усложнить формулы, чтобы позаботиться об обработке ошибок
- Если вы предпочитаете решение на основе сценариев, ниже приведен (довольно не элегантный) пример того, как это можно сделать.
Нормализация (переформатирование) данных перекрестных таблиц для Таблицы без использования Excel
- Я ставлю даты как последний столбец, а не как первый, потому что в денормализованных таблицах принято ставить ключи первыми, а значения - позже. Отменить заказ тривиально.
- Даты 1899 года - это, конечно, пустые ячейки таблицы. Опять же, я оставляю читателю обработку ошибок в качестве упражнения: -)