Страницы: 1
RSS
Замена определенной формулы значением (макрос)
 
Всем привет!
Задача следующая - заменить все формулы определенного типа во всей книге на значения с помощью макроса. Т.е. если в ячейке попадается, например, формула =SUM(A1:A2)+COUNT(A1), то вся ячейка заменяется на значение.

Нашел следующий макрос.
Код
Sub test() 
Dim c As Range 
For Each c In ActiveSheet.UsedRange.Cells 
If c.HasFormula Then
If InStr(1, c.Formula, "SUM") <> 0 Then c.Value = c.Value 
End If
Next
End Sub
Хочу попросить вашей помощи в исправлении макроса таким образом, чтобы он действовал в отношении всей книги, а не только активного листа. Да, пример не прикладываю, поскольку задача вроде бы предельно ясна.

По оплате плз в личку. Нужно в течение нескольких часов.

Заранее спасибо!
Изменено: AchilleS - 12.12.2014 12:41:09
 
Код
Sub test()
Dim c As Range, sh As Worksheet, rRange As Range
For Each sh In ThisWorkbook.Worksheets
On Error Resume Next
Set rRange = sh.Cells.SpecialCells(xlCellTypeFormulas, 23)
    If Err.Number = 0 Then
        For Each c In rRange
            If c.HasFormula Then
                If InStr(1, c.Formula, "SUM")<> 0 Then c.Value = c.Value
            End If
        Next
    Else
        Err.Clear
    End If
Set rRange = Nothing
Next
End Sub
Изменено: SkyPro - 12.12.2014 12:57:57
 
SkyPro,

Спасибо! Работает!  
 
Некоторое усложнение - можно ли скорректировать данный макрос таким образом, чтобы:

1) можно было указать несколько формул подряд через запятую (напр. "SUM", "VLOOKUP" и пр.) - если нужен пример - где-то находил для такого случая.
2) При нажатии на макрос, текущая версию книги сохранялась под новым именем (напр., в конце имени файла дописывалось _values) - идея в том, чтобы сохранить текущую версию с формулами и переключиться на новую со значениями.

по поводу 2) Здесь возможны несколько вариантов - думаю, оптимальным будет следующий - текущая версия книги остается неизменной, просто создается ее копия, в которой уже исполняется макрос, переводящий формулы в значения - данный момент можно обсудить.

По оплате - плз в личку.

Спасибо!
 
Работа выполнена. Спасибо!
 
Код
InStr(1, c.Formula, "SUM")
- не очень правильный ход. Лучше:
Код
InStr(1, c.Formula, "SUM(")
Иначе вместо только СУММ и СУММЕСЛИ будет заменена, и СУММПРОИЗВ...
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Я взял варианты с
Код
"^SUM(" , "/SUM(", "*SUM(" 

и т.д.
Страницы: 1
Наверх