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

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

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