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



Эта формула генерирует счетчик по горизонтали, который сбрасывается на 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:_,_)))
Ух ты, я даже никогда раньше не видел функцию карты. Решение даже чище, чем я предполагал. Огромный респект!
Вот еще два альтернативных способа достижения желаемого результата, используя 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=α))))
Справочный пост: stackoverflow.com/questions/75772794/…