Допустим, моя первая таблица выглядит следующим образом:
Я хочу, чтобы вторая таблица в первом документе выглядела следующим образом:
Есть ли элегантный способ сделать это с помощью формул? Я знаю, что мне всегда придется указывать максимальное количество повторений и резервировать столько ячеек в строке второй таблицы.
Мне уже удалось составить несколько формул для таблицы 2:
B1 = =IF(NOT(ISNA(MATCH("x";$Table1.$A$1:$Table1.$A$3;0)));CONCATENATE("A";MATCH("x";$Table1.$A$1:$Table1.$A$3;0));IF(NOT(ISNA(MATCH("x";$Table1.$B$1:$Table1.$B$3;0)));CONCATENATE("B";MATCH("x";$Table1.$B$1:$Table1.$B$3;0));IF(NOT(ISNA(MATCH("x";$Table1.$C$1:$Table1.$C$3;0)));CONCATENATE("C";MATCH("x";$Table1.$C$1:$Table1.$C$3;0)))))
B2 = =IF(NOT(ISNA(MATCH("o";$Table1.$A$1:$Table1.$A$3;0)));CONCATENATE("A";MATCH("o";$Table1.$A$1:$Table1.$A$3;0));IF(NOT(ISNA(MATCH("o";$Table1.$B$1:$Table1.$B$3;0)));CONCATENATE("B";MATCH("o";$Table1.$B$1:$Table1.$B$3;0));IF(NOT(ISNA(MATCH("o";$Table1.$C$1:$Table1.$C$3;0)));CONCATENATE("C";MATCH("o";$Table1.$C$1:$Table1.$C$3;0)))))
B3 = =IF(NOT(ISNA(MATCH("c";$Table1.$A$1:$Table1.$A$3;0)));CONCATENATE("A";MATCH("c";$Table1.$A$1:$Table1.$A$3;0));IF(NOT(ISNA(MATCH("c";$Table1.$B$1:$Table1.$B$3;0)));CONCATENATE("B";MATCH("c";$Table1.$B$1:$Table1.$B$3;0));IF(NOT(ISNA(MATCH("c";$Table1.$C$1:$Table1.$C$3;0)));CONCATENATE("C";MATCH("c";$Table1.$C$1:$Table1.$C$3;0)))))
Я уверен, что я мог бы разработать что-то подобное для остального, но эти формулы становятся огромными и могут свести меня с ума, если мне когда-нибудь понадобится что-то изменить, поэтому мне интересно, есть ли более элегантный способ сделать это.
Edit: Альтернативно, было бы также неплохо, чтобы таблица2 выглядела так, если это проще реализовать:
Прежде всего, облегчите работу себе и Calc - уберите из ячейки слова "Occurences of", оставьте только нужное значение (x, o, c и т.д.). Если вам нужно это слово для красоты, вы можете показать его в ячейке, используя пользовательский формат Occurences of \"@\"
.
Теперь сравните все ячейки исходного диапазона со значением в первом столбце. Если значение не совпадает, то используйте пустую строку. В противном случае используйте функцию ADDRESS(), чтобы получить координаты ячейки. Объедините результаты с помощью функции TEXTJOIN() и не забудьте, что это формула массива, завершите формулу нажатием Ctrl+Shift+Enter.
{=TEXTJOIN(",";1;IF(Sheet1.$A$1:$C$3=$A1;ADDRESS(ROW(Sheet1.$A$1:$C$3);COLUMN(Sheet1.$A$1:$C$3);4;1);""))}