Как превратить строковую формулу в «настоящую» формулу - PullRequest
62 голосов
/ 17 декабря 2010

У меня есть 0,4*A1 в ячейке (в виде строки). Как преобразовать эту «формулу строки» в реальную формулу и вычислить ее значение в другой ячейке?

Ответы [ 7 ]

49 голосов
/ 17 декабря 2010

Evaluate может подойти:

http://www.mrexcel.com/forum/showthread.php?t=62067

Function Eval(Ref As String)
    Application.Volatile
    Eval = Evaluate(Ref)
End Function
33 голосов
/ 04 сентября 2014

Я конкатенировал мою формулу как обычно, но в начале у меня было '= вместо =.

Затем я копирую и вставляю текст в нужное место.Затем я выделяю раздел, сохраненный как текст, и нажимаю ctrl + H , чтобы найти и заменить.
Я заменяю '= на =, и все мои функции активны.

Это несколько этапов, но он избегает VBA.

Надеюсь, это поможет,

Роб

12 голосов
/ 17 декабря 2010

Просто для забавы я нашел интересную статью здесь , чтобы использовать как-то скрытую функцию оценки, которая существует в Excel. Хитрость заключается в том, чтобы назначить его имени и использовать имя в ваших ячейках, потому что EVALUATE () выдаст вам сообщение об ошибке, если использовать его непосредственно в ячейке. Я пытался, и это работает! Вы можете использовать его с относительным именем, если хотите скопировать по строкам, если лист.

10 голосов
/ 05 октября 2012

ОБНОВЛЕНИЕ Раньше это работало (в 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 этой таблицы.

Если бы ячейка А1 была, скажем, 10, то =0.4*INDIRECT("A1") вернул бы 4.

4 голосов
/ 28 декабря 2015

Я предпочитаю 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 выглядит следующим образом:

usage in excel-sheet

2 голосов
/ 19 июля 2016

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

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

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

Примечания: а) Не требует программирования / VBA. б) Я сделал это в Excel 2013, и он работает.

0 голосов
/ 19 февраля 2016

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

Например, = TEXT («0,4 * A1», «##») вернет значение 0,4 * значение, которое находится в ячейке A1 этой таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...