Excel VBA: Скрыть ошибку с помощью макроса

Автор Посетитель, 14 марта 2018, 20:14

Посетитель

А можно ли с помощью макроса скрыть ошибку #ДЕЛ/0!
Ну чтобы эта надпись не отображалась в ячейке, если появилась такая ошибка.
Пример, к сожалению, не взял с собой. Просто мне нужно это сделать без функции =ЕСЛИОШИБКА в каждой ячейке.

Администратор

Формула в ячейке должна остаться? Или можно удалить формулу?
Если должна остаться, то остаётся только условное форматирование.
А макрос будет делать в пределах возможностей экселя, ничего нового с помощью макроса нельзя сделать.

Администратор

А почему вам не подходит функция "ЕСЛИОШИБКА"?

Посетитель

Потому что в большом количестве ячеек уникальные ссылки, просто так не скопируешь.

Посетитель

Собственно, не то, что не подходит. 500 раз писать вручную я замучаюсь. Формула должна остаться, да.

Администратор

С помощью макроса можно так подставить функцию "ЕСЛИОШИБКА".
Макрос работает с выделенными ячейками. Макрос смотрит, есть ли в ячейке формула, прежде чем вставить функцию "ЕСЛИОШИБКА", поэтому можете выделять и шапку таблицы.
Но целые столбцы нельзя выделять, т.к. макрос будет очень долго работать, т.к. на листе 1 млн. строк.
Если будете выделять с помощью клавиши Ctrl, то два раза одни и те же ячейки нельзя выделять.

Для формул массива такая функция не подойдёт.

И предполагается, что нужно вставить функцию "ЕСЛИОШИБКА" в начало формулы. Если надо вставить функцию "ЕСЛИОШИБКА" в середину формулы, то макрос неправильно отработает.

Макрос
Sub макрос()

    Dim cell As Range, calc As Long
   
    ' Отключение монитора, чтобы ускорить макрос.
    Application.ScreenUpdating = False
   
    ' Отключение пересчёта формул, чтобы ускорить макрос.
        ' Перед отключением запоминаем режим формул, чтобы потом его вернуть.
    calc = Application.Calculation
    Application.Calculation = xlCalculationManual
   
    ' Вставка в ячейки, в которых есть формулы, функции "ЕСЛИОШИБКА".
    For Each cell In Selection.Cells
        If cell.HasFormula Then
            cell.Value = "=IFERROR(" & Mid(cell.Formula, 2) & ","""")"
        End If
    Next cell

    ' Включение того, что отключили.
    Application.ScreenUpdating = True
    Application.Calculation = calc
   
    ' Сообщение.
    MsgBox "Готово.", vbInformation

End Sub
[свернуть]

Посетитель