У меня есть строки с такими выражениями, как 8,753 - 1,087*4 + 0,1784*5*5 + 0,3447*4*4 в столбце A
Я хотел бы, чтобы VBA вычислил результирующее значение в столбце B.
Кто-нибудь может что-нибудь порекомендовать?
Я пробовал функцию оценки VBA, но это приводит к ошибке, я пробовал косвенно в excel и пытался вставить «=» в VBA - тоже не помогает. В настоящее время работает только ручной переход к ячейке и ввод = для каждой строки, но у меня есть 20000 таких строк, и я не могу изменить источник ввода или формат. Должен быть лучший способ сделать это...


Вы должны перебрать каждую строку в столбце A с помощью VBA, оценить выражение каждой строки, а затем ввести результат в столбец B. Чтобы помочь вам, рассмотрим следующий пример:
Sub Values()
Dim lastRow As Long
Dim i As Long
Dim formula As String
Dim result As Variant
lastRow = Range("A" & Rows.Count).End(xlUp).Row
For i = 1 To lastRow
formula = Range("A" & i).Value
result = Evaluate(formula)
Range("B" & i).Value = result
Next i
End Sub
Если строка содержит допустимый расчет, Application.Evaluate будет работать. Однако VBA предполагает, что в числах используется десятичная точка, а не запятая (запятая интерпретируется как разделитель параметров) — по этой причине вы получаете ошибку 2015.
Так что, возможно, используйте такую функцию:
Function CalculateFormula(ByVal f As String)
f = Replace(f, ",", ".")
CalculateFormula = Application.Evaluate(f)
End Function
Это сработало - проблема была с запятой / десятичной дробью - большое спасибо!
Пытаться:
Public Sub test()
Dim i As Long, LastRow As Long
'Refer to the specific worksheet
With ThisWorkbook.Worksheets("Sheet1")
'Get last row of column A
LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
'Loop all values
For i = 1 To LastRow
'Replace extra spaces with nothing, replace "," with "." and evaluate the formula
.Range("B" & i).Value = Evaluate(Replace(Replace(.Range("A" & i).Value, ",", "."), " ", ""))
Next i
End With
End Sub
Без VBA:
Формула в B1:
=EVAL(A1)
Где EVAL() — именованная функция, которая относится к:
=LAMBDA(x,EVALUATE(x))
Вам может быть интересно: stackoverflow.com/q/53315486/4961700