Convertir IF con referencia a celda anterior en fórmula array con SCAN

Anita plantea un reto técnico interesante: tiene la fórmula =SI(B4=B3; D3+1; 1) que incrementa un contador cuando la celda actual coincide con la anterior, y lo reinicia a 1 cuando cambia. Funciona arrastrando, pero quiere una versión array que se desborde sola. La condición: sin LAMBDA.

El problema de fondo es que la fórmula original es auto-referencial (D3 depende de D2, que depende de D1...), y eso no se puede resolver con arrays simples.

Con SCAN + VSTACK + DROP (Leo): la solución más completa, aunque técnicamente usa LAMBDA (ya que SCAN la requiere). El truco está en construir un array booleano que compare cada elemento con el anterior usando VSTACK + DROP para desplazar:

``
=SCAN(1; B4# = VSTACK(""; DROP(B4#; -1)); LAMBDA(a; b; SI(b; a + 1; 1)))
`

VSTACK(""; DROP(B4#; -1)) crea una copia del array desplazada una posición hacia abajo (con un vacío al inicio), permitiendo la comparación "actual vs anterior" sin auto-referencia.

Con DESREF (enfoque no-array) (Nacho): usa DESREF para crear rangos dinámicos que se expandan con los datos, evitando la necesidad de LAMBDA:

`
=SI(B4# = B3:DESREF(B3; CONTARA(B:B) - 2; 0);
C3:DESREF(C4; CONTARA(C:C) - 2; 0) + 1; 1)
`

Anita bromea llamándoles "lambda-boys" y al final decide quedarse con la fórmula clásica arrastrada para mantener compatibilidad con versiones anteriores de Excel. Leo reconoce que su solución con SCAN "hace trampas" al incluir LAMBDA` indirectamente.

Más contenido de Excel en InflueXcel