Calculo numero de paso
- Jaime Franco Jimenez

- 9 ago 2023
- 2 Min. de lectura
Vamos a ver otro desafío de Excel BI, aunque he modificado el modelo, y, he puesto los valores en una sola columna.
Tenemos los siguientes datos.

El número de paso es aquel número donde los dígitos adyacentes tienen la diferencia de 1 o -1.
Por lo tanto, 5434 es un número de paso donde los dígitos adyacentes difieren en 1 o -1.
· 5-4=1 y 4-3=1 y 3-4=-1

Como he dicho anteriormente, he modificado el modelo, y, he puesto números en una sola columna.
Empecemos…
Debemos de extraer cada carácter de cada cadena, empezando por la celda A2, por lo que usaremos la función EXTRAE, función que vamos a usar más de una vez.
En la celda B2, ponemos LET, creamos una variable, como valor a almacenar, ponemos EXTRAE, como argumento texto, ponemos la celda A2.
=LET(yy;EXTRAE(A2
Como argumento posición inicial, usamos SECUENCIA, como argumento filas, usamos la función LARGO, y, como argumento seleccionamos la celda A2.
=LET(yy;EXTRAE(A2;SECUENCIA(LARGO(A2))
Como argumento numero de caracteres, ponemos 2.
Cerramos paréntesis.
Probamos variable.
=LET(yy;EXTRAE(A2;SECUENCIA(LARGO(A2));2);yy)
Obtenemos una matriz desbordada con cada dos números de la cadena, es decir, 54, 43, 34, y 4.

Solo nos interesa las parejas de números, por lo que vamos a crear otra variable, preguntamos que, si la longitud de la variable “yy” es igual a 1, que ponga un texto en blanco, en caso contrario, que devuelva la variable “yy”.
Probamos la variable.
=LET(yy;EXTRAE(A2;SECUENCIA(LARGO(A2));2);a;SI(LARGO(yy)=1;"";yy);a)
Obtenemos solo las parejas de números, pero, con un blanco.

Dicho blanco, o, celda vacía vamos a quitarlo, para ello, usamos la función FILTRAR, como argumento array, es el condicional SI, como argumento include, sigue siendo el condicional SI, siempre que sea diferente a blanco.
LET(yy;EXTRAE(A2;SECUENCIA(LARGO(A2));2);a;FILTRAR(SI(LARGO(yy)=1;"";yy);SI(LARGO(yy)=1;"";yy)<>"");a)
Creamos otra variable, restamos el primer carácter por la izquierda, menos el primer carácter por la derecha.
Probamos la variable.
=LET(yy;EXTRAE(A2;SECUENCIA(LARGO(A2));2);a;FILTRAR(SI(LARGO(yy)=1;"";yy);SI(LARGO(yy)=1;"";yy)<>"");b;ABS(IZQUIERDA(a))-ABS(DERECHA(a));b)
Obtenemos una matriz desbordada con la resta de cada cadena.

Sumamos la resta.
=LET(yy;EXTRAE(A2;SECUENCIA(LARGO(A2));2);a;FILTRAR(SI(LARGO(yy)=1;"";yy);SI(LARGO(yy)=1;"";yy)<>"");b;SUMA(ABS(IZQUIERDA(a))-ABS(DERECHA(a)));b)
Obtenemos 1 como resultado, entonces, es un numero de paso.
Arrastramos.

Vamos a añadir el argumento calculo de LET, ponemos el condicional SI, como argumento prueba lógica, ponemos el operador lógico O, como argumento valor logico1, ponemos la variable “b” e igualamos a 1, como argumento valor logico2, ponemos la variable “b” e igualamos a -1.
=LET(yy;EXTRAE(A2;SECUENCIA(LARGO(A2));2);a;FILTRAR(SI(LARGO(yy)=1;"";yy);SI(LARGO(yy)=1;"";yy)<>"");b;SUMA(ABS(IZQUIERDA(a))-ABS(DERECHA(a)));SI(O(b=1;b=-1)
Como argumento valor si verdadero, entre comillas dobles, poneos Numero de paso, como argumento valor si falso, ponemos la variable “b”, cerramos paréntesis.
=LET(yy;EXTRAE(A2;SECUENCIA(LARGO(A2));2);a;FILTRAR(SI(LARGO(yy)=1;"";yy);SI(LARGO(yy)=1;"";yy)<>"");b;SUMA(ABS(IZQUIERDA(a))-ABS(DERECHA(a)));SI(O(b=1;b=-1);"Numero de paso";b))
Aceptamos, arrastramos, y, ya lo tenemos.

A partir de aquí, el siguiente ejemplo, lo he añadido, no es de Excel BI.
Y, si tenemos que realizar lo mismo, pero, lo que tenemos son nombres.

Tenemos la expresión de ejemplo anterior.
=LET(yy;EXTRAE(A2;SECUENCIA(LARGO(A2));2);a;FILTRAR(SI(LARGO(yy)=1;"";yy);SI(LARGO(yy)=1;"";yy)<>"");b;SUMA(ABS(IZQUIERDA(a))-ABS(DERECHA(a)));SI(O(b=1;b=-1);"Numero de paso";b))
Donde estamos usando la función EXTRAE, como argumento texto, hemos puesto la celda A2, pues, cambiamos A2 por D2 donde está el primer nombre, no pulsamos Enter.
=LET(yy;EXTRAE(D2;SECUENCIA(LARGO(D2));2);a;FILTRAR(SI(LARGO(yy)=1;"";yy);SI(LARGO(yy)=1;"";yy)<>"");b;SUMA(ABS(IZQUIERDA(a))-ABS(DERECHA(a)));SI(O(b=1;b=-1);"Numero de paso";b))
Antes de EXTRAE, ponemos la función CODIGO, y, obtenemos el código al que pertenece cada carácter extraído.
=LET(yy;CODIGO(EXTRAE(D2;SECUENCIA(LARGO(D2));2));a;FILTRAR(SI(LARGO(yy)=1;"";yy);SI(LARGO(yy)=1;"";yy)<>"");b;SUMA(ABS(IZQUIERDA(a))-ABS(DERECHA(a)));SI(O(b=1;b=-1);"Numero de paso";b))
Antes de CODIGO, ponemos la función SUMA.
=LET(yy;SUMA(CODIGO(EXTRAE(D2;SECUENCIA(LARGO(D2));2)));a;FILTRAR(SI(LARGO(yy)=1;"";yy);SI(LARGO(yy)=1;"";yy)<>"");b;SUMA(ABS(IZQUIERDA(a))-ABS(DERECHA(a)));SI(O(b=1;b=-1);"Numero de paso";b))
Es decir, hemos extraído cada carácter, hemos obtenido el código de cada carácter, y, hemos sumado los códigos, por lo que obtenemos el numero a saber si es numero de paso o no.
Aceptamos, arrastramos, y, lo tenemos.

Miguel Angel Franco Garcia




Comentarios