Страницы: 1
RSS
Переделать макрос на Универсальный с пользовательским интерфейсом
 
Добрый день
Есть замечательный макрос, который в выделенном диапазоне меняет формулы, путем заключения существующих формул в функцию Округл()

Код
Sub ChangeFormulasByAddingRound()
For Each cell In Selection
If cell.Value <> "" Then cell.Formula = "=ROUND(" & Mid(cell.Formula, 2) & ",2)"
Next
End Sub
Как сделать его универсальным, очень часто нужно заключить существующие формулы в другие формулы (например, я сталкиваюсь с Датазнач, Еслиошибка...). Я конечно могу переделать этот макрос на нужные в данную минуту функции, но может есть "поизящнее" решение...
 
Решение тут одно, - анализировать текущую формулу (cell.Formula),
и в зависимости от этого, добавлять или не добавлять =ROUND()

так попробуйте
Код
Sub ChangeFormulasByAddingRound()
    On Error Resume Next
    Dim cell As Range, OK As Boolean
    Const Exceptions$ = "Еслиошибка|Датазнач"

    For Each cell In Selection.SpecialCells(xlCellTypeFormulas)        ' перебираем только формулы
        OK = True
        For Each txt In Split(Exceptions$, "|")        ' проверяем на вхождение названий формул-исключений
            If cell.FormulaLocal Like "*" & txt & "*" Then OK = False: Exit For
        Next

        If OK Then If cell.Value <> "" Then cell.Formula = "=ROUND(" & Mid(cell.Formula, 2) & ",2)"
    Next cell
End Sub
 
Ливиан,замысел непонятен, что значит более изящное решение. Вы хотите в выпадающем списке указывать формулу, в которую обернуть имеющиеся данные или же как написал Игорь дооборачивать новые значения?
 
Цитата
Игорь написал:
Вы хотите в выпадающем списке указывать формулу, в которую обернуть имеющиеся данные
Именно так. Это в идеале. Мне по работе приходится периодически  "оборачивать" некоторые ячейки с формулами в функции Еслиошибка, Датазнач, Округл (были и другие, сейчас не вспомню), и это применяется не ко всему столбцу, а к некоторым ячейкам... И универсальный макрос был бы очень полезен.
Т.е. в ячейках были формулы = 1+2+3, а станет = еслиошибка( 1+2+3; 5)
 
а  если в выпадающем списке функций, для каждой функции разное количество аргументов?
Цитата
Ливиан написал:
Т.е. в ячейках были формулы = 1+2+3, а станет = еслиошибка( 1+2+3; 5)
"5"-вы откуда брать собираетесь?
«Бритва Оккама» или «Принцип Калашникова»?
 
В идеале это диалоговое окно. Когда у меня еще не было макроса, я через Заменить как-то делал. В макросе я смог бы вывести запрос на значение аргументов, типа разрядность Округл(). А вот с более чем 2 аргументами - да, пока не понятно. Тут ряд проблем, 1. Существующая формула каким аргументом будет, 2. значения других аргументов (особенно если это ссылки). Тут тоже получается через диалоговое окно.
Изменено: Ливиан - 16.05.2016 18:47:31
 
Добрый день, извините что продолжаю старую тему
Почти сделал этот макрос, универсальный, работает и с формулами и с значениями
В приложении
Одна проблема, макрос переделывает формулы и значения в формулы, например, если ввести Строку в начале =( и в конце )*0, то обнулит все выделенные ячейки.
Но если в начале добавить =еслиошибка( и в конце ;0), то не работает
Помогите разобраться, пожалуйста
 
а так?
Код
If cell.Value <> "" And Left(cell.Formula, 1) = "=" Then cell.FormulaLocal = FrstSmbls & Mid(cell.Formula, 2) & ScndSmbls
 
Нет, к сожалению
В ячейке А3 была формула =12*3+СУММ(A1:A2) которая возвращала 38
Теперь =ЕСЛИОШИБКА(12*3+SUM(A1:A2);0) и результат 0, т.к. ошибка SUM(A1:A2)
В правильном варианте в ячейке должна получиться формула =ЕСЛИОШИБКА(12*3+СУММ(A1:A2);0) и результат 38
Проблема в том, что СУММ меняется на SUM
 
Пример с пользовательской формой.
 
Спасибо, за помощь
Страницы: 1
Читают тему
Наверх