Нарыл в загашнике еще одну интересную функцию для 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

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

Между прочим, кого-то из вас поджидает вакансия в Проф-Медиа Business Solutions. Кого?

Также читайте всю серию постов по VBA.

  

2 комментариев на «VBA Excel: Формула, заданная строкой»

  1. Jack пишет:

    сумбурненько. не понял зачем это было необходимо.

    ликбез:
    Replace(expression, find, replace[, start[, count[, compare]]])
    expression – Required. String expression containing substring to replace. – Это ГДЕ ищем.
    find – Required. Substring being searched for. – Это ЧТО ищем.
    replace – Required. Replacement substring. – Это ЧЕМ заменяем.

    start – Optional. Position within expression where substring search is to begin. If omitted, 1 is assumed. – По идее – какое или с какого вхождения по счёту заменить. по умолчанию заменяем все.
    count и compare …

    Теперь, по моей логике, функция:

Оставить комментарий