Digamos que tengo un resultado de fórmula que devuelve esto +10+5+1+40
, como texto. Luego quiero sumar esos números para obtener el total.
El resultado podría ser cualquier número de valores, como por ejemplo +2+5
o +10+5+7+1+8
.
En caso de que sea útil, el conjunto de datos original es algo como esto S10_S5_S1_S40
o esto E_E_S2_S5
. He eliminado todo excepto los números al lado de S, que es lo que quiero agregar.
Por último, estoy publicando en superusuario porque quiero evitar VBA si puedo.
Actualizar
A través de esta fórmula:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(D25,"E",""),"_",""),"S","=",1),"S","+")
Lo he reducido a esto =10+5+1+40
, donde D25 = S10_S5_S1_S40
... ¡pero eso es realmente lo mismo que tener un +
frente, supongo!
Respuesta1
Suponiendo que solo tiene números de 1 o 2 dígitos según sus ejemplos, esta "fórmula matricial" sumará todos los números "S" de D25
=SUM(IF(MID(D25,ROW(INDIRECT("1:"&LEN(D25))),1)="S",(0&SUBSTITUTE(MID(D25,ROW(INDIRECT("1:"&LEN(D25)))+1,2),"_",""))+0))
confirmado conCTRL+SHIFT+ENTER
Entonces, si D25 contiene S10_S5_S1_S40
eso, te dará el resultado 56.
Respuesta2
No existe una fórmula de hoja de trabajo que haga eso. Puede usar la antigua función de macro de Excel 4 EVALUAR (), pero solo se puede usar en un rango con nombre.
Entonces, si tiene datos en la columna D y tiene la fórmula sustituta en la columna E, por ejemplo, seleccione F25 y cree una nueva fórmula con nombre con el Administrador de nombres. Dale el nombre "EvaluateMe" y deja que se refiera a
=EVALUATE(Sheet1!E25)
Luego, ingresa
=EvaluateMe
en la celda F25 y se mostrará el resultado. Este rango con nombre utiliza una referencia relativa, y si la celda activa estaba en F25 cuando la definiste, siempre intentará evaluar la celda directamente a la izquierda.
Respuesta3
Esto se deriva de la “asombrosa” respuesta de Barry. La siguiente “fórmula matricial”
=SUM(IF(MID(D25,ROW(INDIRECT("1:"&LEN(D25))),1)="S",MID(D25,ROW(INDIRECT("1:"&LEN(D25)))+1,IFERROR(FIND("_",D25,ROW(INDIRECT("1:"&LEN(D25)))+1),LEN(D25)+1)-(ROW(INDIRECT("1:"&LEN(D25)))+1))+0))
(ingresado con Ctrl+ Shift+ Enter) sumará todos los números 'S' en la celda D25
, independientemente de su longitud; entonces, si D25
contiene "S10_S5_S1_S240", la fórmula anterior le dará el resultado 256. Esto también manejará números negativos: "S10_S5_S–1_S240" dará como resultado 254.
No lo he probado exhaustivamente. Probablemente encontraré algún problema el lunes por la mañana. :)