В данной статье представлены разные варианты макросов для быстрой замены формул на значения в документах MS Excel
Заменить формулу на значение можно следующим образом: выделяем нужную ячейку, нажимаем F2, F9, Enter и в текущей ячейке формула заменится на значение. Если таких ячеек много, то это превратится в долгий и рутинный процесс. На помощь придут следующие макросы
Макрос для превращения всех формул в значения в выделенном диапазоне (или нескольких диапазонах, выделенных одновременно с Ctrl):
Sub Formulas_To_Values_Selection()
'преобразование формул в значения в выделенном диапазоне
Dim smallrng As Range
For Each smallrng In Selection.Areas
smallrng.Value = smallrng.Value
Next smallrng
End Sub
Макрос для превращения всех формул в значения на текущем листе:
Sub Formulas_To_Values_Sheet()
'преобразование формул в значения на текущем листе
ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value
End Sub
Макрос для превращения всех формул в книге и на всех листах:
Sub Formulas_To_Values_Book()
'преобразование формул в значения во всей книге
For Each ws In ActiveWorkbook.Worksheets
ws.UsedRange.Value = ws.UsedRange.Value
Next ws
End Sub
Данный макрос меняет все формулы на значения во всех файлах на всех листах в указанной папке
Sub УдалитьВсеФормулыВПапке()
Dim fd As FileDialog
Dim iPath As String
Dim iFileName As String
Dim iSheet As Worksheet
Set fd = Application.FileDialog(msoFileDialogFolderPicker)
ChDir "C:\"
With fd
.ButtonName = "Выбрать"
If .Show = -1 Then
iPath = .SelectedItems(1) & Application.PathSeparator
Else
Exit Sub
End If
End With
Set fd = Nothing
if MsgBox("Во всех документах Excel в папке " & iPath & " на всех листах формулы будут заменены на значения!" & Chr(13) & "Вы уверены ???", vbOKCancel + vbExclamation, "Подтверждение") = vbCancel Then Exit Sub
If MsgBox("Вы отдаёте себе отчёт, что формулы во всех файлах будут удалены?", vbOKCancel + vbExclamation, "Подтверждение") = vbCancel Then Exit Sub
If MsgBox("Во всех документах Excel в папке " & iPath & " на всех листах формулы будут заменены на значения!" & Chr(13) & "Вы уверены ???", vbOKCancel + vbExclamation, "Подтверждение") = vbCancel Then Exit Sub
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
'.EnableEvents = False
iFileName = Dir(iPath & "*.xls")
Do While iFileName$ <> ""
With Workbooks.Open(Filename:=iPath & iFileName, UpdateLinks:=0)
For Each iSheet In .Sheets
With iSheet.UsedRange
.Value = .Value
End With
Next
.Close saveChanges:=True
End With
iFileName$ = Dir
Loop
.EnableEvents = True
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
End With
MsgBox "Во всех документах Excel в папке " & iPath & " на всех листах формулы были заменены на значения!", 64, "Конец"
End Sub
Код нужных макросов можно скопировать в новый модуль вашего файла. Нажимаем Alt+F11 чтобы попасть в Visual Basic, далее Insert – Module чтобы попасть в Visual Basic, далее Insert – Module. Запускать их потом можно через вкладку Разработчик – Макросы (Developer – Macros) или сочетанием клавиш Alt+F8. Макросы будут работать в любой книге, пока открыт файл, где они хранятся.
Внимание! Действия выполненные макросом невозможно отменить – применяйте их с осторожностью.
Sub Заменитель() If da = vbOK Then MsgBox “Формулы превращались в значение”, vbInformation, “Заменитель” For Each Cell In Selection Cell.Formula = Cell.Value Next Cell Else MsgBox “Формулы не изменены” End If End Sub