VBA Excel: Формула, заданная строкой

Источник: doitq
Павел Рындин

Нарыл в загашнике еще одну интересную функцию для Excel. Возникла у меня нужда дать пользователю самому составить простенькую формулу с одной переменной (их, на самом деле строго две, но принцип понятен и на одной). Составить прямо на листе, не после знака "=", а чтобы видно было. Результат вычисления используется в многих других местах.

' strVar - значение переменной  
' strFormula - строка, содержащая саму формулу, место, куда надо
' подставить переменную, обозначено символами VAR

Function sheetFormula(strVar As String, strFormula As Variant) As Variant

' Если формула пустая, не тратим ресурсы
If strFormula = "" Then Exit Function

' Юзер - дурак, уберем крайние пробелы
strFormula = Trim(strFormula)

' Чем возиться с параметрами замены, проще все перевести
' в верхний регистр
strFormula = UCase(strFormula)

' Подставляем переменную простой заменой
strFormula = Replace(strFormula, "VAR", CStr(strVar))

' Мой (ну почему только мой?!) фирменный финт:
' заменяем запятую на точку, позволяя пользователю
' использовать любой из этих знаков
strFormula = Replace(strFormula, ",", ".")

' Вычисляем все с помощью функции Evaluate.
' Конструкция выглядит загадочно, но только так я
' добился от этой функции стабильной работы.
' Что она там себе думает, не знаю.
sheetFormula = Evaluate(CStr(strFormula) + "+0")

End Function

Теперь можно попросить пользователя в одной ячейке вбить значение переменной, в другой - формулу, а результат использовать по всей книге.


Страница сайта http://www.interface.ru
Оригинал находится по адресу http://www.interface.ru/home.asp?artId=22014