Excel находит и заменяет многие функции диапазоном до другой функции

#excel

#excel

Вопрос:

В настоящее время у меня есть лист Excel со многими функциями =AVERAGE(диапазон) (каждый раз разные диапазоны), которые мне нужно изменить на =AVERAGEIF(диапазон, «<>0»), чтобы избежать подсчета 0. Есть ли способ быстро найти и заменить их все? простое удаление всех нулей возвращает среднюю функцию #!DIV/0 , и это невозможно отобразить на графике, поэтому это не вариант, который работает.

Ответ №1:

Этот короткий макрос будет работать с очень простыми формулами, такими как:

 =AVERAGE(A1:A10)
  

Это не будет работать с такими формулами, как:

 =AVERAGE(A1:A10) 1
  

В стандартном модуле введите:

 Sub FormulaFixer()
    Dim r As Range, s As String, core As String, dq As String
    dq = Chr(34)
    
    For Each r In ActiveSheet.UsedRange
        If r.HasFormula Then
            s = r.Formula
            If Left(s, 9) = "=AVERAGE(" And Left(s, 11) <> "AVERAGEIF(" Then
                core = Mid(s, 10)
                core = Left(core, Len(core) - 1)
                r.Formula = "=AVERAGEIF((" amp; core amp; ")," amp; dq amp; "<>0" amp; dq amp; ")"
            End If
        End If
    Next r
End Sub
  

Перед:

введите описание изображения здесь

После:

введите описание изображения здесь

Если у вас более сложные уравнения, макрос необходимо будет изменить.