преобразовать сумму строки в сумму суммы в EXCEL - PullRequest
0 голосов
/ 12 марта 2019

Я хочу суммировать значения строковых ячеек. Эта идея состоит в том, чтобы преобразовать строковую ячейку в число суммы, а затем вычислить сумму. Вот пример, чтобы проиллюстрировать, что я имею в виду:

Пусть A такая ячейка, что A = "4 + 5 + 6", я хочу преобразовать эту ячейку в сумму следующим образом: A = 4 + 5 + 6, чем вычислить A = 15.

Короче говоря, существует ли метод / идея для преобразования строковой суммы в сумму непосредственно через Excel.

Ответы [ 4 ]

0 голосов
/ 12 марта 2019

без VBA:

С данными в A1 , в B1 введите:

=IFERROR(--TRIM(MID(SUBSTITUTE(SUBSTITUTE($A1,CHAR(34),""),"+",REPT(" ",999)),COLUMNS($A:A)*999-998,999)),"")

и скопировать через (эта формула разбивает строку на ее числовые элементы) . Затем в A2 введите:

=SUM(1:1)

enter image description here

EDIT # 1:

Чтобы избежать использования «вспомогательных» ячеек, вы можете использовать эту формулу массива в ячейке B1 :

=SUM((TRIM(MID(SUBSTITUTE(SUBSTITUTE(A1,CHAR(34),""),"+",REPT(" ",255)),1+(ROW(A1:A999)-1)*255,255)) & "0")/10)

enter image description here

Формулы массива необходимо вводить с помощью Ctrl + Shift + Введите , а не просто Enter, Если это сделано правильно, формула появится в фигурных скобках вокруг нее в строке формул.

0 голосов
/ 12 марта 2019

при условии, что ваша текстовая ячейка называется textcell, вы можете использовать следующий код

Dim arrayofWords
Dim sum As Integer
arrayofWords = Split([textcell], "+")
For i = LBound(arrayofWords) To UBound(arrayofWords)
    sum = sum + CInt(arrayofWords(i))
Next
MsgBox sum
0 голосов
/ 12 марта 2019

VBA Не требуется (SORT OF)

Evaluate - это встроенный скрипт VBA, который выполняет именно то, что вы описываете.Однако вам не нужно использовать редактор VBA.Вместо этого вы можете ссылаться через ИМЯ ФОРМУЛЫ.Однако после того, как вы ссылаетесь на него таким образом, вы больше не сможете сохранять свою электронную таблицу в формате xlsx, вместо этого вам нужно будет использовать xlsm.

Предположим, вы выложили данные, как на этом рисунке, и выхотите, чтобы ответ появился в F10 и J12:

setup

Шаг 1

Выберите ячейку, в которой вы хотите выполнить расчет(или ячейка, в которой вы хотите получить ответ).Выполнение этого сначала установит контрольную точку для следующих шагов.В этом случае я выбираю ячейку F10.

Шаг 2

Выбрав ячейку F10, перейдите на вкладку Формулы на ленте и выберите «Определить имя» в разделах «Определенные имена»:

Ribbon selection

Шаг 3

В появившемся окне введите имя в поле имени.Это имя - то, что вы будете использовать в формулах Excel.Для этого примера я выбрал имя «Ответить».В поле для ссылки: введите следующую формулу:

=evaluate(F9)

Обратите внимание, что в ячейке нет ссылки на блокировку ($).Это делает ссылку относительно выбранной ячейки на шаге 1. В этом случае ячейка F9 - это ячейка непосредственно над тем местом, где должен появиться ответ в F10.

Выберите OK, и окно закроется

Defined Name

Шаг 4

Теперь в ячейке F9 и в ячейке J12 введите следующую формулу

=Answer

Обратите внимание, что то же самоеформула в двух разных местах вычисляет строковую операцию над ячейкой и правильно возвращает два разных ответа.

POC

Пока строка построена из приемлемой математикиОператор, который распознает Excel и не содержит ошибок, таких как пропущенные скобки, оценивает, обрабатывает строку и выдает значение.Одна проблема, которую я заметил в тот день, была в том, что названная формула была специфична только для листа, на котором она была определена.Каждый последующий лист требует своего собственного определенного имени.

0 голосов
/ 12 марта 2019

Вот решение:

Excel VBA >> новый модуль >> применить пользовательскую функцию к нужной ячейке.

вот пользовательская функция

Function func(arg)
    func = Evaluate(arg.value)
End Function
...