Частичная транспонирование листа - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть Google Лист с этим форматом:

+---------+---------+---------+------------+------------+------------+------------+--------+--------+
| Field_A | Field_B | Field_C | 24/09/2019 | 25/09/2019 | 26/09/2019 | 27/09/2019 | day... | day... |
+---------+---------+---------+------------+------------+------------+------------+--------+--------+
| ValX    | ValY    | ValZ    | Val1       | Val2       | Val3       | Val4       |        |        |
| ValW    | ValY    | ValZ    | Val5       | Val6       | Val7       | Val8       |        |        |
+---------+---------+---------+------------+------------+------------+------------+--------+--------+

Первые 3 столбца являются конкретными полями, а все остальные столбцы относятся к одному конкретному дню в данном (и статическом) диапазоне.

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


+---------+---------+---------+------------+-----------+
| Field_A | Field_B | Field_C |    Date    | DateValue |
+---------+---------+---------+------------+-----------+
| ValX    | Valy    | Valz    | 24/09/2019 | Val1      |
| ValX    | Valy    | Valz    | 25/09/2019 | Val2      |
| ValX    | Valy    | Valz    | 26/09/2019 | Val3      |
| ...     |         |         |            |           |
+---------+---------+---------+------------+-----------+

По сути, первые 3 столбца собраны как есть, но столбец дня в транспонированном (четныйправильный термин?) с двумя значениями:

  • Дата
  • Значение в ячейке, относящееся к дате

Это то, что может быть достигнуто с помощьюФормула или мне нужно создать ограниченный AppsScript?

После демонстрации примера листа: https://docs.google.com/spreadsheets/d/1cprzD96i-4NQ8tieA_nwd8s43yKF-M8Kww4yWNfB6tg/edit#gid=505040170

  • В листе Start вы можете увидеть исходные данные и формат, 3статические столбцы и один столбец для каждого da
  • В листе End вы можете увидеть нужный мне формат вывода, те же 3 статических столбца, но дата и значение ячейки, относящиеся к дате, транспонируются какстрока.

Вы можете увидеть формулу, которую я использовал, TRANSPOSE for в каждой строке, где я выбираю дни для столбца IV и по одной строке за один раз для строки V.Для 3 статических столбцов я реплицировал формулу для каждого экземпляра дня, связанного с этой строкой.Это работает, но требует много ручного труда для настройки каждого TRANSPOSE.Мне интересно, есть ли более автоматический способ сделать это (за исключением использования AppsScript, в этом случае я уже планирую сделать это, если не доступны другие решения)

1 Ответ

1 голос
/ 26 сентября 2019
=ARRAYFORMULA(TRIM(SPLIT(TRANSPOSE(SPLIT(QUERY(TRANSPOSE(QUERY(TRANSPOSE(
 IF(Start!D2:F<>""; "♦"&TRANSPOSE(QUERY(TRANSPOSE(Start!A2:C&"♠");;999^99))&
 TEXT(Start!D1:F1; "dd/mm/yyyy")&"♠"&Start!D2:F; ));;999^99));;999^99); "♦")); "♠")))

0

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