Павел Рындин
Нарыл в загашнике еще одну интересную функцию для 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
Теперь можно попросить пользователя в одной ячейке вбить значение переменной, в другой - формулу, а результат использовать по всей книге.
Ссылки по теме