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

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

9 ответов

Решение

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.

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

обкрадывать

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

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

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

использование в excel-листе

На мой взгляд, лучшие решения находятся по этой ссылке: 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) В ячейку A4 введите =testEval,

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

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

Скажем, пусть у нас есть столбец E заполняется формулами, которые возвращают строку, например:

= " = " & D7

где D7 Ячейка состоит из более сложной формулы, которая составляет окончательный желаемый результат, например:

= 3.02 * 1024 * 1024 * 1024

И так во всех огромных количествах строк.

Когда строк мало - достаточно скопировать нужные ячейки как значения (ПКМ)
в ближайший столбец, скажемG, и нажмите F2 с последующим Enter в каждой из строк.
Однако при огромном количестве строк это невозможно...

Итак, нет VBA. Никаких лишних формул. Нет F&R

Без ошибок, без опечаток, а только глупые механические действия,

Как на конвейере Форда. И всего за несколько секунд:

  1. [Предположим, что все задействованные столбцы имеют "Общий" формат.]
  2. Откройте Блокнот ++
  3. Выбрать весь столбец D
  4. Ctrl+C
  5. Ctrl+V на АЭС
  6. Ctrl+A на АЭС
  7. Выберите ячейку в первой строке нужного столбца G1
  8. Ctrl+V
  9. Наслаждаться:) .

Excel 2019 здесь. EVALUATE недействителен.

Это сработало бы, если бы мы создали из него именованный диапазон:

Но в этом случае мы предоставляем абсолютную ссылку, что не очень хорошо:

  1. Нам придется изменять формулу каждый раз, когда мы захотим ее повторно использовать.
  2. При изменении значения в A1 результат оценки не изменится.

Решение:

      =EVALUATE(GET.CELL(5,OFFSET(INDIRECT("RC",FALSE),0,-1)))

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

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

Другие вопросы по тегам