Всем привет! Задача следующая - заменить все формулы определенного типа во всей книге на значения с помощью макроса. Т.е. если в ячейке попадается, например, формула =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
Хочу попросить вашей помощи в исправлении макроса таким образом, чтобы он действовал в отношении всей книги, а не только активного листа. Да, пример не прикладываю, поскольку задача вроде бы предельно ясна.
По оплате плз в личку. Нужно в течение нескольких часов.
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
Некоторое усложнение - можно ли скорректировать данный макрос таким образом, чтобы:
1) можно было указать несколько формул подряд через запятую (напр. "SUM", "VLOOKUP" и пр.) - если нужен пример - где-то находил для такого случая. 2) При нажатии на макрос, текущая версию книги сохранялась под новым именем (напр., в конце имени файла дописывалось _values) - идея в том, чтобы сохранить текущую версию с формулами и переключиться на новую со значениями.
по поводу 2) Здесь возможны несколько вариантов - думаю, оптимальным будет следующий - текущая версия книги остается неизменной, просто создается ее копия, в которой уже исполняется макрос, переводящий формулы в значения - данный момент можно обсудить.