Valores complexos de soma em uma célula

Valores complexos de soma em uma célula

Digamos que eu tenha um resultado de fórmula que retorne this +10+5+1+40como texto. Quero então somar esses números para obter o total.

O resultado pode ser qualquer número de valores, como +2+5ou +10+5+7+1+8.

Caso seja útil, o conjunto de dados original é algo assim S10_S5_S1_S40ou isto E_E_S2_S5. Retirei tudo, exceto os números próximos a S, que é o que quero adicionar.

Por último, estou postando sobre superusuário porque quero evitar o VBA, se puder.

Atualizar

Através desta fórmula: =SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(D25,"E",""),"_",""),"S","=",1),"S","+")

Cheguei a isso =10+5+1+40, onde D25 = S10_S5_S1_S40... mas isso é realmente o mesmo que ter um +na frente, eu acho!

Responder1

Supondo que você tenha apenas números de 1 ou 2 dígitos conforme seus exemplos, esta "fórmula de matriz" somará todos os 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 comCTRL+SHIFT+ENTER

então se D25 contiver S10_S5_S1_S40isso lhe dará o resultado 56

Responder2

Não existe uma fórmula de planilha que faça isso. Você pode usar a antiga função de macro EVALUATE() do Excel 4, mas ela só pode ser usada em um intervalo nomeado.

Portanto, se você tiver dados na coluna D e tiver a fórmula substituta na coluna E, por exemplo, selecione F25 e crie uma nova fórmula nomeada com o Gerenciador de Nomes. Dê a ele o nome de "EvaluateMe" e faça referência a

=EVALUATE(Sheet1!E25)

Então, entre

=EvaluateMe 

na célula F25 e o resultado será exibido. Este intervalo nomeado usa uma referência relativa e se a célula ativa estava em F25 quando você o definiu, ele sempre tentará avaliar a célula diretamente à esquerda.

Responder3

Isso deriva da resposta “incrível” de Barry. A seguinte “fórmula de matriz”

=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))

(inserido com Ctrl++ Shift) Enteradicionará todos os números 'S' na célula D25, independentemente do comprimento; portanto, se D25contiver “S10_S5_S1_S240”, a fórmula acima fornecerá o resultado 256. Isso também lidará com números negativos: “S10_S5_S –1_S240” produzirá 254.

Eu não testei isso exaustivamente. Provavelmente encontrarei algo errado com isso na segunda de manhã. :)

informação relacionada