Как превратить строковую формулу в" реальную " формулу
У меня есть 0,4*A1
в ячейке (в виде строки). Как можно преобразовать эту "строковую формулу" в реальную формулу и вычислить ее значение в другой ячейке?
7 ответов:
Evaluate
можно:http://www.mrexcel.com/forum/showthread.php?t=62067
Function Eval(Ref As String) Application.Volatile Eval = Evaluate(Ref) End Function
я сцепил свою формулу как обычно, но в начале у меня было
'=
вместо=
.затем я копирую и вставляю как текст туда, где мне это нужно. Затем я выделяю раздел, сохраненный как текст, и нажимаю ctrl + H найти и заменить.
Я заменяю'=
с=
и все мои функции активны.его несколько этапов, но он избегает VBA.
надеюсь, это поможет,
Роб
просто для удовольствия, я нашел интересные статьи тут, чтобы использовать как-то скрытую функцию оценки, которая существует в Excel. Хитрость заключается в том, чтобы присвоить ему имя и использовать имя в своих ячейках, потому что EVALUATE() даст вам сообщение об ошибке, если оно будет использоваться непосредственно в ячейке. Я пробовал, и это работает! Вы можете использовать его с относительным именем, если вы хотите скопировать строки если через лист.
обновление это раньше работало (в 2007 году, я считаю), но не в Excel 2013.
EXCEL 2013:
это не совсем то же самое, но если можно поместить 0.4 в одну ячейку (B1, скажем), а текстовое значение A1 в другую ячейку (C1, скажем), в ячейку D1, вы можете использовать =B1*косвенный(C1), что приводит к вычислению значения 0.4 * A1.
Итак, если A1 = 10, вы получите
0.4*10 = 4
в ячейке D1. Я буду обновлять снова, если я могу найти лучшее решение 2013 года, и извините, что Microsoft уничтожила исходную функциональность косвенного!версия EXCEL 2007:
для решения, отличного от VBA, используйте
INDIRECT
формула. Он принимает строку в качестве аргумента и преобразует ее в ссылку на ячейку.например,
=0.4*INDIRECT("A1")
вернет значение 0.4 * значение, которое находится в ячейке A1 этого листа.если ячейка A1 была, скажем, 10, то
=0.4*INDIRECT("A1")
вернет 4.
Я предпочитаю 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 выглядит следующим образом:
на мой взгляд лучшее решение в этой ссылке: http://www.myonlinetraininghub.com/excel-factor-12-secret-evaluate-function
вот резюме: 1) в ячейке A1 введите 1, 2) в ячейке A2 введите 2, 3) в ячейке A3 введите +, 4) Создайте именованный диапазон, с "=оценить(A1 & A3 & A2)" в поле ссылается на при создании именованного диапазона. Давайте назовем этот именованный диапазон " testEval", 5) в ячейке A4 введите =testEval,
ячейка A4 должна иметь значение 3 дюйма оно.
заметки: а) не требует программирования на VBA. b) я сделал это в Excel 2013, и это работает.