Как удалить в ячейке формулу, оставив значения?
Что умеет Excel
Иногда формула в ячейке нужна лишь на короткое время — только для получения результата. А затем уже не нужна ни сама формула, ни ячейки, на которые она ссылается. Но вот беда — если удалить ячейки, то формула «ломается», как это говорится. Т.е. в ячейке получается либо #ЗНАЧ! либо #ССЫЛКА!. Или Вам надо просто зафиксировать значение, полученное в результате работы формулы. Т.е. чтобы формулы там не было, а было только значение. Как ни странно, но делается это проще простого:
Выделяете ячейку/несколько ячеек с формулами — Копируете — Правая кнопка мыши — Специальная вставка — Значения

Вот и все. Больше формул нет. Так же подобное можно сделать при помощи кода VBA:
Sub Formulas_To_Values() Selection.Value = Selection.Value End Sub
Sub Formulas_To_Values()
Selection.Value = Selection.Value
End SubДанный код заменяет формулы в выделенном диапазоне на значения. Только необходимо учитывать, что выделенный диапазон должен быть неразрывным. Иначе код выдаст ошибку. А такой код
Sub All_Formulas_To_Values() ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value End Sub
Sub All_Formulas_To_Values()
ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value
End Subзаменит все формулы на листе в значения. При этом будут разорваны все связи на данном листе. Это стоит учитывать. Кстати, иногда именно для этого и применяют подобный код.
И в качестве бонуса ниже приведен код, который заменит все формулы на всех листах активной книги в значения:
Sub All_Formulas_To_Values_In_All_Sheets() Dim wsSh As Worksheet For Each wsSh In Sheets wsSh.UsedRange.Value = wsSh.UsedRange.Value Next wsSh End Sub
Sub All_Formulas_To_Values_In_All_Sheets()
Dim wsSh As Worksheet
For Each wsSh In Sheets
wsSh.UsedRange.Value = wsSh.UsedRange.Value
Next wsSh
End SubКак быстрее вызвать:
Вообще данную команду можно вывести на Быструю панель и использовать в одно нажатие тогда, когда нужно.
В 2007 Excel это делается через Меню-Параметры Excel-Настройка. Находите нужную команду(Вставить значения) и добавляете;
В 2003 Excel: Сервис-Настройка-вкладка Команды-категория «Правка»-Вставить значения.
Теперь у Вас появится значок на Быстрой панели.
А если Вы один раз выполните вот такой код:
Sub Add_PasteSpecials() Application.CommandBars("Cell").Controls.Add ID:=370, before:=4 End Sub
Sub Add_PasteSpecials()
Application.CommandBars("Cell").Controls.Add ID:=370, before:=4
End Subто у Вас в контекстном меню мыши появится команда — «Вставить значения». Она полностью дублирует стандартную, только вызвать её быстрее — одно нажатие и все.

Также см.:
→Вставить значения

12961

а можно чтоб макрос обробатЫвал только ячейки с формулами………….просто у меня текст з надстрочнЫми буквами…….
А в чем причина такого подхода? Ведь если в других ячейках не формулы — плохо-то не будет. Но раз так надо — макрос ниже сделает именно нужное Вам.
Sub Formula_to_Value() Dim rFrmlRng As Range, rArea As Range Set rFrmlRng = ActiveSheet.UsedRange.SpecialCells(xlCellTypeFormulas) If rFrmlRng Is Nothing Then Exit Sub For Each rArea In rFrmlRng.Areas rArea.Value = rArea.Value Next rArea End SubОх…
Огромное спасибо за статью и сайт в целом.
Я мучаюсь над проблемой, что тут поднята..но мне как раз наоборот надо. Мне надо, что бы он текстовые менял, а формулы не трогал.
Потому что у меня в файле нужные формулы образуются через команду «СЦЕПИТЬ» и кусков текста формулы.
А какое тогда отношение имеет Ваш комментарий к теме? Если даже не понятно что Вам надо во что преобразовать, т.к. формулы Вам трогать не надо. Задайте вопрос в .
А как заставить первый макрос заменять формулы на значения в определённом диапазоне?
Вместо
вказываете свой диапазон:
wsSh.Range("A1:B10").Value = wsSh.Range("A1:B10").ValueВопрос конечно смешной, но все же. Как удалить комманду из контекстного меню( случайно запустил ваш код несколько раз, теперь там несколько строк вставить значение)
Вопрос можно снять. Спасибо, разобрался:)
А есть такое же для Word-a:
Sub Add_PasteSpecials() Application.CommandBars("Cell").Controls.Add ID:=370, before:=4 End SubКак удалить комманду из контекстного меню( случайно запустил ваш код несколько раз, теперь там несколько строк вставить значение)
Денис, очень просто:
Application.CommandBars("Cell").ResetApplication.CommandBars("Cell").ResetСпасибо!!!
Рискну предложить свои модификации. Решил дополнить макрос возможностью менять значение либо в активной ячейке либо в выделеном диапазоне, мне чаще нужны 2 эти возможности
Sub Formula_to_Value() Dim rFrmlRng As Range, rArea As Range Set rFrmlRng = Range(ActiveCell.Address & "," & Selection.Address) If rFrmlRng Is Nothing Then Exit Sub For Each rArea In rFrmlRng.Areas rArea.Value = rArea.Value Next rArea End SubАлексей, боюсь, что Ваш пример некорректен. Активная ячейка в любом случае входит в выделенный диапазон, а следовательно Вы все равно во всех выделенных ячейках сделаете замену. Т.е. по сути Ваш код мог бы быть таким:
Sub Formula_to_Value() Dim rArea As Range For Each rArea In Selection.Areas rArea.Value = rArea.Value Next rArea End Sub