1

Допустим, у меня есть результат формулы, который возвращает это +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 ... но это действительно то же самое, что иметь + впереди, я думаю!

3 ответа3

3

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

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

=EVALUATE(Sheet1!E25)

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

=EvaluateMe 

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

2

Предполагая, что у вас есть только 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

0

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .