Tenemos las siguientes cadenas:
Debemos de extraer los números y sumarlos junto con sus signos.
El signo puede aparecer antes o después del número.
Si no hay signo, el número deberá tratarse como positivo.
El modelo debe de quedar como sigue:
En la celda B2, usamos LET, creamos una variable, usamos la funcion REGEXEXTRACT, como argumento texto ponemos la celda A2, como argumento patrón, entre comillas dobles ponemos "[0-9+--]+", es decir, extraer todos los números, además, de el signo mas o menos todas las veces que aparezcan, como argumento return mode, seleccionamos 1, es decir, mostrar todas las coincidencias.
Vamos a obtener los números y signos de la celda A2.
=LET(a;REGEXEXTRACT(A2;"[0-9+--]+";1);a)
Vemos que el signo de más de la cantidad 340 aparece al final, y, debe de aparecer al principio, para ello, creamos otra variable, usamos el condicional SI, como argumento prueba lógica, preguntamos si no es número el primer carácter por la derecha de la variable “a”, y, multiplicamos por 1, para que nos devuelva el formato en número.
=LET(a;REGEXEXTRACT(A2;"[0-9+--]+";1);b;SI(NO(ESNUMERO(DERECHA(a)*1))
Como argumento valor si verdadero, usamos la funcion DERECHA, como argumento texto, ponemos la variable “a”, para obtener el signo si fuera un signo, concatenamos con la funcion IZQUIERDA, como argumento texto, ponemos la variable “a”, como argumento numero de caracteres, usamos la funcion LARGO, como argumento ponemos la variable “a”, y, restamos 1, para que no nos devuelva el signo, como argumento valor si falso, ponemos la variable “a”.
=LET(a;REGEXEXTRACT(A2;"[0-9+--]+";1);b;SI(NO(ESNUMERO(DERECHA(a)*1));DERECHA(a)&IZQUIERDA(a;LARGO(a)-1);a)*1;b)
Obtenemos la primera cantidad con el signo de más, y, la segunda cantidad sin signo quiere decir que es una cantidad positiva.
Usamos el argumento calculo de LET, y, sumamos la variable “b”.
=LET(a;REGEXEXTRACT(A2;"[0-9+--]+";1);b;SI(NO(ESNUMERO(DERECHA(a)*1));DERECHA(a)&IZQUIERDA(a;LARGO(a)-1);a)*1;SUMA(b))
En este caso, tenemos la resta de ambas cantidades que es de 242.
Después del signo igual, usamos la funcion BYROW, como argumento array, seleccionamos el rango A2:A10, como argumento funcion ponemos LAMBDA, y, declaramos una variable, como argumento calculo es la funcion LET, pero, cambiamos A2 por la variable creada.
=BYROW(A2:A10;LAMBDA(x;LET(a;REGEXEXTRACT(x;"[0-9+--]+";1);b;SI(NO(ESNUMERO(DERECHA(a)*1));DERECHA(a)&IZQUIERDA(a;LARGO(a)-1);a)*1;SUMA(b))))
Ya lo tenemos.
Tenemos un error donde en la cadena no hay números, pues, después del signo igual usamos la función SI.ERROR, como argumento valor es la funcion BYROW, como argumento valor si error, ponemos blanco.
=SI.ERROR(BYROW(A2:A10;LAMBDA(x;LET(a;REGEXEXTRACT(x;"[0-9+--]+";1);b;SI(NO(ESNUMERO(DERECHA(a)*1));DERECHA(a)&IZQUIERDA(a;LARGO(a)-1);a)*1;SUMA(b))));"")
Ahora si lo tenemos.
Miguel Angel ranco Garcia
Comments