Формула Excel для создания текущего подсчета горизонтального списка значений

=LET(Data,verticalArray,
SCAN(0,Data=DROP(VSTACK("",Data),-1),
    LAMBDA(a,b,IF(b,a+1,1))))

Эта формула хорошо работает для вертикального массива, но я не могу сформулировать рабочий аналог, если набор данных был горизонтальным (например, A1:Z1).

Предполагаемый результат — реплицировать формулу СЧЕТЕСЛИ(A1:Z1, A1) и возвращать массив (обратите внимание, что СЧЕТЕСЛИ(A1#, A1) не работает, а скопированное СЧЕТЕСЛИ($A1:A1, A1) не является массивом. ).

Попытка, но неудачная:

=LET(data, A1#, SCAN(0, data=DROP(HSTACK("", data), -1), LAMBDA(a,b, IF(b, a+1, 1))))
=LET(data, A1#, SCAN(0, data=TRANSPOSE(DROP(VSTACK("", data), -1)), LAMBDA(a,b, IF(b, a+1, 1))))
=LET(data, A1#, SCAN(0, data=DROP(TRANSPOSE(VSTACK("", data)), -1), LAMBDA(a,b, IF(b, a+1, 1))))

Справочный пост: stackoverflow.com/questions/75772794/…

Prodigus 30.05.2024 20:49

Можете ли вы поделиться скриншотом ваших данных и ожидаемого результата? COUNTIF($A1:A1, A1) скопированное сообщение не дает того же результата, что и публикация, которой вы поделились.

z.. 30.05.2024 21:00
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
1
2
93
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Эта формула генерирует счетчик по горизонтали, который сбрасывается на 1 каждый раз, когда значение отличается:

=HSTACK(1,SCAN(1,A1:K1=B1:L1,LAMBDA(a,c,IF(c,a+1,1))))

Эта формула генерирует текущий счетчик для каждого значения без сброса (это эквивалентно перетаскиванию =COUNTIF($A1:A1,A1)):

=MAP(A1:L1,LAMBDA(_,COUNTIF(A1:_,_)))

Ух ты, я даже никогда раньше не видел функцию карты. Решение даже чище, чем я предполагал. Огромный респект!

Prodigus 30.05.2024 21:21

Вот еще два альтернативных способа достижения желаемого результата, используя SCAN() и MAP():


• Формула, используемая в ячейке A2

=SCAN(0,A1:L1=HSTACK("",DROP(A1:L1,,-1)),LAMBDA(x,y,IF(y,x+1,1)))

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


• Формула, используемая в ячейке A5

=MAP(A1:L1,LAMBDA(α,SUM(N(α:A1=α))))

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