Как удалить в ячейке формулу, оставив значения?
Иногда формула в ячейке нужна лишь на короткое время - только для получения результата. А затем уже не нужна ни сама формула, ни ячейки, на которые она ссылается. Но вот беда - если удалить ячейки, то формула "ломается", как это говорится. Т.е. в ячейке получается либо
Выделяем ячейку(несколько ячеек) с формулами -Копируем -Правая кнопка мыши - Специальная вставка
Данную команду можно вынести на Панель быстрого доступа и использовать в одно нажатие тогда, когда нужно. Как это сделать:
- 2010 Excel и выше Файл- Параметры- Настройка. В выпадающем списке Выбрать команды из: выбираем Все команды. Находим команду Вставить значения и добавляем
- 2007 Excel Меню- Параметры Excel- Настройка. В выпадающем списке Выбрать команды из: выбираем Все команды. Находим команду Вставить значения и добавляем
- 2003 Excel: Сервис- Настройка- вкладка Команды- категория Правка- Вставить значения.
Теперь в Панели быстрого доступа появится значок Вставка значений.
Тоже самое можно сделать при помощи кода VBA:
Sub Formulas_To_Values() Selection.Value = Selection.Value End Sub |
Данный код заменяет формулы в выделенном диапазоне на значения. Только необходимо учитывать, что выделенный диапазон должен быть неразрывным. Иначе код выдаст ошибку. А такой код:
Sub All_Formulas_To_Values() ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value End Sub |
заменит все формулы на значения во всех ячейках листа. При этом будут разорваны все связи на данном листе. Так же этот код заменит все формулы даже если на листе применен фильтр(т.е. замена будет и в скрытых фильтром ячейках). Это стоит учитывать. Кстати, иногда именно для этого и применяют подобный код.
Так же следует помнить, что после выполнения практически любого макроса буфер обмена Excel очищается и отменить действие макроса невозможно. Поэтому все действия и "испытания" лучше производить на копиях данных. Но если все же заменили на рабочем файле - можно попробовать закрыть книгу без сохранений.
А следующий код заменит формулы на значения во всех ячейках на всех листах активной книги:
Sub All_Formulas_To_Values_In_All_Sheets() Dim wsSh As Worksheet For Each wsSh In Worksheets wsSh.UsedRange.Value = wsSh.UsedRange.Value Next wsSh End Sub |
У этого кода нюансы со связями и скрытыми ячейками точно такие же, как и у предыдущего, но уже в масштабах всех листов книги. Плюс, даже если какие-то листы скрыты - замена будет произведена и на них тоже.
А вот код ниже более интересен с точки зрения повседневного использования: он заменить формулы на значения только в видимых ячейках выделенного диапазона. Может пригодиться, если заменить надо формулы при установленном фильтре или в несмежных областях:
Sub All_Formulas_To_Values_OnlyVisible() Dim rRng As Range, rArea As Range If Selection.Count = 1 Then Set rRng = ActiveCell Else Set rRng = Selection.SpecialCells(12) End If For Each rArea In rRng.Areas rArea.Value = rArea.Value Next rArea End Sub |
Если один раз выполнить код ниже, то в контекстном меню по правому клику мыши появится стандартная команда Вставить значения
Sub Add_PasteSpecials() Dim cbb Set cbb = Application.CommandBars("Cell").FindControl(ID:=370) If Not cbb Is Nothing Then cbb.Delete 'удаляем пункт, если он был уже добавлен ранее Application.CommandBars("Cell").Controls.Add ID:=370, before:=4 End Sub |
Также см.:
Вставить значения
Формулы перестали считать - как исправить?
Статья помогла? Поделись ссылкой с друзьями!
Поиск по меткам
Access apple watch Multex Power Query и Power BI VBA управление кодами Бесплатные надстройки Дата и время Записки ИП Надстройки Печать Политика Конфиденциальности Почта Программы Работа с приложениями Разработка приложений Росстат Тренинги и вебинары Финансовые Форматирование Функции Excel акции MulTEx ссылки статистикаКомментарии, не имеющие отношения к комментируемой статье, могут быть удалены без уведомления и объяснения причин. Если есть вопрос по личной проблеме - добро пожаловать на Форум
Денис, очень просто:
Application.CommandBars("Cell").Reset
Спасибо!!!
Рискну предложить свои модификации. Решил дополнить макрос возможностью менять значение либо в активной ячейке либо в выделеном диапазоне, мне чаще нужны 2 эти возможности
Алексей, боюсь, что Ваш пример некорректен. Активная ячейка в любом случае входит в выделенный диапазон, а следовательно Вы все равно во всех выделенных ячейках сделаете замену. Т.е. по сути Ваш код мог бы быть таким:
Добрый день.
Я с макросами не знаком. У меня код
отрабатывая, изменяет форматы некоторых ячеек.
Значение "2-15" превращается в дату "15.02.2012"
Как отключить автоматическое изменение формата ячейки?
Или прописать в макросе конкретный формат ячейки?
Алексей, тут лишь один выход - присваивать ячейкам формат текстовый. Но тогда числа будут лишь выглядеть как числа. Хотя я у себя подобной проблемы не наблюдал ранее при выполнении подобного кода.
Прописать конкретный формат - достаточно записать присвоение этого формата ячейке макрорекордером и затем вставить в код. Например:
Я вчера сам до этого допёр, но "wsSh.UsedRange.NumberFormat = "@"" я ставил после "Value = wsSh.UsedRange.Value". Ну и естественно ничего хорошего из этого не вышло. Плюнул на это и всё сделал вручную (времени уже небыло на эксперименты).
Данная статья полезна, однако , если список отфильтрован, данный метод не подходит, т.к. значения будут вставляться не в те ячейки, что выделены, а подряд, и в спрятанные ячейки также. Произойдет смещение данных. Поэтому мне помогает в данном случае следующий код:
таким образом, формулы заменяются только в видимом диапазоне.
Это очень медленный подход. Делать надо иначе - во втором комментарии я привел код, который можно перевести на только видимые ячейки:
остается только добавить проверку, если только одна ячейка выделена.
Дополнил статью кодом замены формул только в видимых ячейках
И в качестве бонуса ниже приведен код, который заменит все формулы на всех листах активной книги в значения:
При выполнении предложенного кода выскакивает ошибка "Нельзя изменять часть массива"
(некоторые формулы в листе являются массивами и по фильтру некоторые строки с данными формулами скрыты).
Как обеспечить чтобы и формулы массивов заменялись значениями или чтобы код выполнялся без прерывания по ошибке (чтобы формулы массивов не заменялись но заменялись значениями остальные ячейки)???