Как применить формулу только к определенным функциям

У меня есть список команд, у каждой из которых есть номер. У меня есть функция, которая определяет общие ценности каждой команды. Мне нужно найти способ, позволяющий этой функции автоматически определять изменение номера команды. Очевидно, что мой длиннее и имеет десятки рядов.

Как применить формулу только к определенным функциям

=LET(rng;B2:B5;col;TOCOL(TEXTSPLIT(TEXTJOIN(",";TRUE;rng);",";;TRUE;TRUE)); TEXTJOIN(",";;TOCOL(IF(BYROW(UNIQUE(col);LAMBDA(x;SUM(--(x=col))))=ROWS(rng);UNIQUE(col);1/0);3))

Я пытался использовать формулу If с чем-то вроде =IF ( A2<>A3; ... ), но я не думаю, что это правильный путь, и я не знаю, как использовать VBA и макросы.

Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
0
107
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Я только что заменил ваш LET(rng,B2:B5, на LET(rng,FILTER(Table1[Column2],Table1[Teams]=A2), и обернул его формулой IF, чтобы она заполнялась только в том случае, если команда отличается от предыдущей строки.

Обратите внимание, что я использую , вместо ; для разделения аргументов.

=IF(A2<>A1,LET(rng,FILTER(Table1[Column2],Table1[Teams]=A2), col,TOCOL(TEXTSPLIT(TEXTJOIN(",",TRUE,rng),",",,TRUE,TRUE)), TEXTJOIN(",",,TOCOL(IF(BYROW(UNIQUE(col),LAMBDA(x,SUM(--(x=col))))=ROWS(rng),UNIQUE(col),1/0),3))),"")

Большое спасибо, это будет полезно

Boivin12 29.04.2024 09:10

Чтобы сделать это более гибким, я бы изменил IF(A2<>A1 на IF(COUNTIF($A$2:A2;A2)=1. Таким образом, если, например, A3 изменится на 3, оно не будет повторяться в следующий раз, когда появится 1 или 3.

Notus_Panda 29.04.2024 10:18

Я бы выбрал следующий подход:

  • Разделите каждую запись ячейки на массив (для этого вы можете использовать функцию рабочего листа TextSplit()).
  • Объедините все это вместе, как при объединении множеств.
  • В этом объединенном объединении запустите функцию рабочего листа Unique(), чтобы найти уникальные идентификаторы).
  • Для каждого из этих уникальных идентификаторов используйте CountIf() в каждом из TextSplit-ted массивов.
  • Возьмите сумму каждой из этих CountIf() функций. Если это соответствует общему количеству строк, вы нашли запись, которая существует в каждой ячейке.

Что касается объединения, я могу «объединять» только строки, поэтому я провел следующий эксперимент: поместил «1,2,3,4,5» в ячейку «B1» и «2,3». ,4,5,6" в ячейке "B2" и используйте следующую формулу:

=UNIQUE(TEXTSPLIT(TEXTJOIN(",";TRUE;B1;B2);","))

Как видите, идея заключалась в следующем:

  • Объедините «B1» и «B2» в «1,2,3,4,5,2,3,4,5,6».
  • разделите его на [1, 2, 3, 4, 5, 2, 3, 4, 5, 6]"
  • и возьмите уникальные записи

Это должно было быть [1, 2, 3, 4, 5, 6], но на моем компьютере это дает [1, 2, 3, 4, 5, 2, 3, 4, 5, 6].

Хотя мои результаты ошибочны, я совершенно уверен, что мой подход верен.

Может быть, кто-то с лучшим знанием Excel сможет это исправить?

Если вы хотите использовать UNIQUE таким образом, вам следует TEXTSPLIT выделять строки, а не столбцы. Просто добавьте дополнительный пробел, например:=UNIQUE(TEXTSPLIT(TEXTJOIN(",",TRUE,B1,B2),,","))

kevin 29.04.2024 16:14

Вот немного более обобщенная версия (с использованием Microsoft 365).

Основная логика (очень похожа на предложения выше)

  1. Получите уникальные значения для каждой команды (удаление дубликатов)
  2. Найдите пересечение между группами, прочесывая две группы за раз и удаляя значения, встречающиеся только один раз.

Как вы можете видеть в примере, это не зависит от упорядочивания по номеру команды.

common_values_for_team

= LAMBDA(
    team_number,
    LET(
      teams_values,
      unique_values_for_team(team_number),
      IF(ROWS(teams_values) = 1,
         teams_values,
         REDUCE(,teams_values,
           LAMBDA(
             acc,
             row,
             TEXTJOIN(
               col_delim,,
               intersection_a_b(
                TEXTSPLIT(acc, col_delim), TEXTSPLIT(row, col_delim))))))))

intersection_a_b получить общие значения в двух строках (уникальные(комбинированные) — один раз)

= LAMBDA(a,b,
    LET(
      ab,
      HSTACK(a, b),
      u,
      UNIQUE(ab, TRUE),
      once,
      UNIQUE(ab,TRUE,TRUE),
      is_common,
      ISNA(MATCH(u,once,0)),
      FILTER(u,is_common,"none")))

unique_values_for_team (получите уникальные значения для команды в одном столбце)

=LAMBDA(n, unique_values_as_delim_text(split_col_to_numbers(team_values(n))))

unique_values_as_delim_text (конвертировать строки и столбцы со значениями в один столбец)

=LAMBDA(area,BYROW(area,LAMBDA(row,TEXTJOIN(col_delim,,UNIQUE(row,TRUE)))))

Другие функции и переменные:

Имя Относится к col_delim = "," row_delim = "|" Split_col =LAMBDA(single_col,TEXTSPLIT(TEXTJOIN(row_delim,,single_col), col_delim,row_delim)) Split_col_to_numbers =LAMBDA(col,IFNA(VALUE(TRIM(split_col(col))),"")) команда_значения =LAMBDA(number,FILTER(Table1[Column2], Table1[Teams]=number))

Пример данных и результат (таблица команд определяется как Table1)

Номер команды Общие ценности =SORT(UNIQUE(Table1[Teams]))=BYROW(E2#,LAMBDA(number,common_values_for_team(number)))
Команды Столбец2 Номер команды Общие ценности 1 4,7,9,3,1 1 7,9 1 7,5,2,9,4 2 8 1 8,5,7,9 3 3,4,2 5 4,1,8,3,8,9,7 4 1,8,2,5 2 4,8,2 5 4,1,8,3,9,7 2 1,2,7,8 2 3,1,8,6 2 6,3,4,9,3,1,8 2 0,4,8,6,9 3 8,3,4,7,2 3 2,4,6,9,3 4 1,8,2,5 1 3,7,9

Другие вопросы по теме

Excel: автоматическое преобразование ячейки на основе ввода в другую
Excel – суммирование стоимости нескольких идентификаторов материалов из одной ячейки
Как создать функцию VSTACK, пропускающую определенные строки (повторяющиеся строки)
Рассчитать средний рейтинг портфеля акций
Формула массива возвращает данные из ВТОРОЙ соответствующей строки, не может получить первую строку
Ищете альтернативу COUNTIFS(), которая будет работать с динамическим диапазоном (например: вывод массива функции FILTER())
Как выделить уникальное значение из нескольких ячеек
Excel, есть ли формула для заполнения ячейки, если текст присутствует в другой ячейке, в противном случае она пуста, если в указанной ячейке нет текста?
Используя формулы массива Excel Office365, как удалить дубликаты, сохранив последнее значение?
Формула заполнения для игнорирования условий фильтра, если она пуста

Похожие вопросы

Excel: автоматическое преобразование ячейки на основе ввода в другую
Excel: поиск «1» и возврат нескольких значений
Excel – суммирование стоимости нескольких идентификаторов материалов из одной ячейки
Сообщение о медленной работе книги — неиспользуемое форматирование и метаданные можно оптимизировать для повышения производительности
Как создать функцию VSTACK, пропускающую определенные строки (повторяющиеся строки)
Как применить модифицированный тест Манна Кендала к нескольким столбцам в R?
Создайте макрос, позволяющий автоматически вставлять в режиме транспонирования и удалять выделенные скопированные строки
Рассчитать средний рейтинг портфеля акций
Формула массива возвращает данные из ВТОРОЙ соответствующей строки, не может получить первую строку
Ищете альтернативу COUNTIFS(), которая будет работать с динамическим диапазоном (например: вывод массива функции FILTER())