У меня есть 0,4*A1
в ячейке (в виде строки). Как преобразовать эту "формулу строки" в действительную формулу и вычислить ее значение в другой ячейке?
Как превратить формулу строки в "реальную" формулу
Ответ 1
Eval может подойти:
- http://www.mrexcel.com/forum/showthread.php?t=62067
Function Eval(Ref As String)
Application.Volatile
Eval = Evaluate(Ref)
End Function
Ответ 2
Я объединил свою формулу как обычно, но в начале у меня был '=
вместо =
.
Затем я копирую и вставляю текст туда, где мне это нужно. Затем выделите раздел, сохраненный как текст, и нажмите ctrl + H, чтобы найти и заменить.
Я заменяю '=
на =
, и все мои функции активны.
Его несколько этапов, но он избегает VBA.
Я надеюсь, что это поможет,
Rob
Ответ 3
Просто для удовольствия я нашел интересную статью здесь, чтобы использовать какую-то скрытую функцию оценки, которая существует в Excel. Хитрость заключается в том, чтобы назначить его имени и использовать имя в своих ячейках, потому что EVALUATE() предоставит вам сообщение об ошибке, если оно будет использоваться непосредственно в ячейке. Я пробовал и работает! Вы можете использовать его с относительным именем, если вы хотите скопировать по строкам строки.
Ответ 4
UPDATE Это работало (в 2007 году, я считаю), но не в Excel 2013.
EXCEL 2013: Это не совсем то же самое, но если можно поместить 0,4 в одну ячейку (например, B1) и текстовое значение A1 в другой ячейке (C1, скажем), в ячейке D1, вы можете использовать = B1 * INDIRECT ( C1), что приводит к вычислению значения 0.4 * A1. Итак, если A1 = 10, вы получите 0,4 * 10 = 4 в ячейке D1. Я снова обновлю, если найду лучшее решение для 2013 года, и извините, что Microsoft уничтожила исходную функциональность INDIRECT!
Версия EXCEL 2007: Для решения, отличного от VBA, используйте формулу INDIRECT. Он принимает строку в качестве аргумента и преобразует ее в ссылку на ячейку.
Например, = 0.4 * INDIRECT ( "A1" ) вернет значение 0,4 * значение, которое в ячейке A1 этого листа.
Если ячейка A1 была, скажем, 10, то = 0.4 * INDIRECT ( "A1" ) вернет 4.
Ответ 5
Я предпочитаю vba-решение для профессиональных решений.
С частями рассматриваемая процедура замены искать и заменять только ПОЛНЫЕ СЛОВА, я использую следующую vba-процедуру:
''
' Evaluate Formula-Text in Excel
'
Function wm_Eval(myFormula As String, ParamArray variablesAndValues() As Variant) As Variant
Dim i As Long
'
' replace strings by values
'
For i = LBound(variablesAndValues) To UBound(variablesAndValues) Step 2
myFormula = RegExpReplaceWord(myFormula, variablesAndValues(i), variablesAndValues(i + 1))
Next
'
' internationalisation
'
myFormula = Replace(myFormula, Application.ThousandsSeparator, "")
myFormula = Replace(myFormula, Application.DecimalSeparator, ".")
myFormula = Replace(myFormula, Application.International(xlListSeparator), ",")
'
' return value
'
wm_Eval = Application.Evaluate(myFormula)
End Function
''
' Replace Whole Word
'
' Purpose : replace [strFind] with [strReplace] in [strSource]
' Comment : [strFind] can be plain text or a regexp pattern;
' all occurences of [strFind] are replaced
Public Function RegExpReplaceWord(ByVal strSource As String, _
ByVal strFind As String, _
ByVal strReplace As String) As String
' early binding requires reference to Microsoft VBScript
' Regular Expressions:
' with late binding, no reference needed:
Dim re As Object
Set re = CreateObject("VBScript.RegExp")
re.Global = True
're.IgnoreCase = True ' <-- case insensitve
re.Pattern = "\b" & strFind & "\b"
RegExpReplaceWord = re.Replace(strSource, strReplace)
Set re = Nothing
End Function
Использование процедуры в листе Excel выглядит следующим образом:
Ответ 6
На мой взгляд, лучшие решения в этой ссылке: http://www.myonlinetraininghub.com/excel-factor-12-secret-evaluate-function
Вот резюме: 1) В ячейке A1 введите 1, 2) В ячейке А2 введите 2, 3) В ячейке A3 введите +, 4) Создайте именованный диапазон с "= Evaluate (A1 и A3 и A2)" в поле ссылается на поле при создании именованного диапазона. Позволяет называть этот именованный диапазон "testEval", 5) В ячейке A4 введите = testEval,
Ячейка A4 должна иметь в ней значение 3.
Примечания: a) Не требует программирования /vba. б) Я сделал это в Excel 2013, и он работает.
Ответ 7
Лучший, не-VBA, способ сделать это - использовать формулу ТЕКСТ. Он принимает строку в качестве аргумента и преобразует ее в значение.
Например, = TEXT ( "0.4 * A1", '##') вернет значение 0,4 * значение, которое в ячейке A1 этого рабочего листа.