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