Как превратить строковую формулу в" реальную " формулу

Я 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*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.


Я предпочитаю VBA-решение для профессиональных решений.

С частью replace-procedure в вопросе поиск и замена целых слов только, я использую следующую процедуру 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 выглядит так:

usage in excel-sheet


на мой взгляд лучшее решение в этой ссылке: http://www.myonlinetraininghub.com/excel-factor-12-secret-evaluate-function

вот резюме: 1) в ячейке A1 введите 1, 2) в ячейке A2 введите 2, 3) в ячейке A3 введите +, 4) Создайте именованный диапазон с "=Evaluate(A1 & A3 & A2)" в поле ссылается на при создании именованного диапазона. Назовем этот именованный диапазон " testEval", 5) в ячейке А4 введите =testEval,

ячейка A4 должна иметь значение 3 в он.

заметки: a) не требует программирования/vba. b) я сделал это в Excel 2013, и он работает.


Лучший, не-VBA, способ сделать это-использовать текстовую формулу. Он принимает строку в качестве аргумента и преобразует ее в значение.

например, =TEXT ("0.4*A1","##") вернет значение 0.4 * значение, которое находится в ячейке A1 этого листа.