Я стараюсь максимально автоматизировать создание нового столбца и заполнить его уникальным «значением заголовка». Хотелось бы максимально автоматизировать это и не использовать никаких дополнительных столбцов для обработки данных.
Вот файл шаблона, показывающий, чего я пытаюсь достичь
Стартовый стол
Paid Forcecasted Forcecasted
Person A Item 1 10€ 23€
Person A Item 2 22€ 7€
Person A Item 3 30€ 10€ 15€
Person B Item 4 5€ 7€ 30€
Person B Item 5 10€ 40€ 6€
Person B Item 6 10€ 5€ 8€
Person C Item 7 2€ 9€
Person C Item 8 4€
Ожидаемый результат
Person A Item 1 10 Paid 23 Forcecasted Forcecasted
Person A Item 2 Paid 22 Forcecasted 7 Forcecasted
Person A Item 3 30 Paid 10 Forcecasted 15 Forcecasted
Person B Item 4 5 Paid 7 Forcecasted 30 Forcecasted
Person B Item 5 10 Paid 40 Forcecasted 6 Forcecasted
Person B Item 6 10 Paid 5 Forcecasted 8 Forcecasted
Person C Item 7 2 Paid Forcecasted 9 Forcecasted
Person C Item 8 4 Paid Forcecasted Forcecasted
Мне удалось добиться успеха с помощью следующей формулы =HSTACK(A2:B9;arrayformula(split(FLATTEN(C2:C9&"/"&C1);"/";0));arrayformula(split(FLATTEN(D2:D9&"/ "&D1);"/";0));arrayformula(split(FLATTEN(E2:E9&"/"&E1);"/";0)))
Это делает свою работу, но я уверен, что есть более простой способ сделать это, поскольку я повторяю последовательность 3 раза. Изначально я хотел использовать Query, но мне не удалось создать новый столбец и заполнить его вычисленными данными.
Я также мог бы сделать что-то очень простое: создать 3 столбца и повторить значение заголовка внутри, а затем запросить все это.
Я уверен, что есть более умные и быстрые способы сделать это.
Большое спасибо!!
Я не знаю, является ли это более простым методом, но вот что вы можете попробовать с помощью LET, CHOOSECOLS, BYROW/LAMBDA и INDEX.
=LET(header;C1:E1;BYROW(A2:E9;LAMBDA(k;hstack(CHOOSECOLS(k;1;2;3);index(header;1;1);index(k;;4);index(header;1;2);index(k;;5);index(header;1;3)))))
Для такой таблицы, как «начальная таблица», с любым количеством строк (но только с пятью показанными столбцами) вы можете использовать следующее:
=let(
hdr;C1:E1;
tbl;filter(A2:E;A2:A<>"");
{choosecols(tbl;1;2)\byrow(choosecols(tbl;3;4;5);lambda(row;torow({row;hdr};;1)))})
Мы используем torow
для объединения ваших данных и заголовков в одну строку, вызывая их построчно внутри byrow
.
Привет! Спасибо большое, буду учиться, хотя у меня не получилось заставить это работать
Извините, моя ошибка (неправильный языковой стандарт для формулы в исходном ответе). Я обновил свой ответ, и теперь он должен работать для вас.
Не беспокойтесь, большое спасибо!!
Вот один из подходов, который вы можете опробовать:
=let(Σ;A2:E9; Λ;lambda(x;wrapcols(x;rows(Σ);x)); Ξ;lambda(x;choosecols(Σ;x));
{Ξ(sequence(3))\Λ(C1)\Ξ(4)\Λ(D1)\Ξ(5)\Λ(E1)})
Привет! Спасибо большое, это очень полезно
Привет! Спасибо большое, это очень полезно