LibreOffice Calc: Формула, необходимая для поиска всех ячеек с определенным значением в таблице

LibreOffice Calc: Формула, необходимая для поиска всех ячеек с определенным значением в таблице
LibreOffice Calc: Формула, необходимая для поиска всех ячеек с определенным значением в таблице - nci @ Unsplash

Допустим, моя первая таблица выглядит следующим образом:

r/c A B C_COPY011 x o c 2 x 3 o x .

Я хочу, чтобы вторая таблица в первом документе выглядела следующим образом:

r/c A B C D 1 Occurences of "x" A1 B2 B3 2 Occurences of "o" A3 B1 3 Occurences of "c" C1

Есть ли элегантный способ сделать это с помощью формул? Я знаю, что мне всегда придется указывать максимальное количество повторений и резервировать столько ячеек в строке второй таблицы.

Мне уже удалось составить несколько формул для таблицы 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 выглядела так, если это проще реализовать:

r/c A B 1 Образцы "x" A1,B2,B3 2 Образцы "o" A3,B1 3 Occurences "c" C1

Прежде всего, облегчите работу себе и 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);""))}

Result


NevaDev, 8 марта 2023 г., 21:08