Комплексное суммирование значений в ячейке

Комплексное суммирование значений в ячейке

Допустим, у меня есть результат формулы, который возвращает это +10+5+1+40, как текст. Затем я хочу сложить эти числа, чтобы получить общую сумму.

Результатом может быть любое количество значений, например +2+5или +10+5+7+1+8.

Если это полезно, исходный набор данных выглядит примерно так S10_S5_S1_S40или так E_E_S2_S5. Я удалил все, кроме цифр рядом с S, которые я и хочу добавить.

Наконец, я пишу от имени суперпользователя, поскольку хочу по возможности избегать VBA.

Обновлять

По этой формуле: =SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(D25,"E",""),"_",""),"S","=",1),"S","+")

Я свел это к этому =10+5+1+40, где D25 = S10_S5_S1_S40... но это на самом деле то же самое, что и наличие a +спереди, я полагаю!

решение1

Предполагая, что у вас есть только 1- или 2-значные числа, как в ваших примерах, тогда эта «формула массива» будет суммировать все числа «S» из D25.

=SUM(IF(MID(D25,ROW(INDIRECT("1:"&LEN(D25))),1)="S",(0&SUBSTITUTE(MID(D25,ROW(INDIRECT("1:"&LEN(D25)))+1,2),"_",""))+0))

подтверждено сCTRL+SHIFT+ENTER

так что если D25 содержит S10_S5_S1_S40это даст вам результат 56

решение2

Формулы на рабочем листе, которая это делает, нет. Вы можете использовать старую макрофункцию Excel 4 EVALUATE(), но ее можно использовать только в именованном диапазоне.

Итак, если у вас есть данные в столбце D, а в столбце E есть формула замены, например, выберите F25 и создайте новую именованную формулу с помощью Name Manager. Дайте ей имя "EvaluateMe" и пусть она ссылается на

=EVALUATE(Sheet1!E25)

Затем введите

=EvaluateMe 

в ячейку F25, и результат будет отображен. Этот именованный диапазон использует относительную ссылку, и если активная ячейка была в F25, когда вы ее определили, он всегда будет пытаться оценить ячейку непосредственно слева.

решение3

Это вытекает из «потрясающего» ответа Барри. Следующая «формула массива»

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

(введено с помощью Ctrl+ Shift+ Enter) добавит все числа «S» в ячейке D25, независимо от длины; так, если D25содержит «S10_S5_S1_S240», приведенная выше формула даст вам результат 256. Это также будет обрабатывать отрицательные числа: «S10_S5_S–1_S240» даст 254.

Я не проверял это досконально. Я, вероятно, сам найду что-то не так в понедельник утром. :)

Связанный контент