В данной статье представлены разные варианты макросов для быстрой замены формул на значения в документах 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. Макросы будут работать в любой книге, пока открыт файл, где они хранятся.
Внимание! Действия выполненные макросом невозможно отменить – применяйте их с осторожностью.
Содержание
- Преобразование формул в значения
- Способ 1. Классический
- Способ 2. Только клавишами без мыши
- Способ 3. Только мышью без клавиш или Ловкость Рук
- Способ 4. Кнопка для вставки значений на Панели быстрого доступа
- Способ 5. Макросы для выделенного диапазона, целого листа или всей книги сразу
- Способ 6. Для ленивых
- Как заменить формулу на значение excel vba
- Как преобразовать все формулы в диапазоне в значения в Excel
- Как макрос работает
- Код макроса
- Как этот код работает
- Как использовать
- Замена формулы на значение и обратно. Сохранение формулы в примечаниях. Excel vba
Преобразование формул в значения
Формулы – это хорошо. Они автоматически пересчитываются при любом изменении исходных данных, превращая Excel из «калькулятора-переростка» в мощную автоматизированную систему обработки поступающих данных. Они позволяют выполнять сложные вычисления с хитрой логикой и структурой. Но иногда возникают ситуации, когда лучше бы вместо формул в ячейках остались значения. Например:
- Вы хотите зафиксировать цифры в вашем отчете на текущую дату.
- Вы не хотите, чтобы клиент увидел формулы, по которым вы рассчитывали для него стоимость проекта (а то поймет, что вы заложили 300% маржи на всякий случай).
- Ваш файл содержит такое больше количество формул, что Excel начал жутко тормозить при любых, даже самых простых изменениях в нем, т.к. постоянно их пересчитывает (хотя, честности ради, надо сказать, что это можно решить временным отключением автоматических вычислений на вкладке Формулы – Параметры вычислений).
- Вы хотите скопировать диапазон с данными из одного места в другое, но при копировании «сползут» все ссылки в формулах.
В любой подобной ситуации можно легко удалить формулы, оставив в ячейках только их значения. Давайте рассмотрим несколько способов и ситуаций.
Способ 1. Классический
Этот способ прост, известен большинству пользователей и заключается в использовании специальной вставки:
- Выделите диапазон с формулами, которые нужно заменить на значения.
- Скопируйте его правой кнопкой мыши – Копировать(Copy) .
- Щелкните правой кнопкой мыши по выделенным ячейкам и выберите либо значок Значения (Values) :
либо наведитесь мышью на команду Специальная вставка (Paste Special) , чтобы увидеть подменю:
Из него можно выбрать варианты вставки значений с сохранением дизайна или числовых форматов исходных ячеек.
В старых версиях Excel таких удобных желтых кнопочек нет, но можно просто выбрать команду Специальная вставка и затем опцию Значения (Paste Special — Values) в открывшемся диалоговом окне:
Способ 2. Только клавишами без мыши
При некотором навыке, можно проделать всё вышеперечисленное вообще на касаясь мыши:
- Копируем выделенный диапазон Ctrl + C
- Тут же вставляем обратно сочетанием Ctrl + V
- Жмём Ctrl , чтобы вызвать меню вариантов вставки
- Нажимаем клавишу с русской буквой З или используем стрелки, чтобы выбрать вариант Значения и подтверждаем выбор клавишей Enter :
Способ 3. Только мышью без клавиш или Ловкость Рук
Этот способ требует определенной сноровки, но будет заметно быстрее предыдущего. Делаем следующее:
- Выделяем диапазон с формулами на листе
- Хватаем за край выделенной области (толстая черная линия по периметру) и, удерживая ПРАВУЮ клавишу мыши, перетаскиваем на пару сантиметров в любую сторону, а потом возвращаем на то же место
- В появившемся контекстном меню после перетаскивания выбираем Копировать только значения (Copy As Values Only) .
После небольшой тренировки делается такое действие очень легко и быстро. Главное, чтобы сосед под локоть не толкал и руки не дрожали 😉
Способ 4. Кнопка для вставки значений на Панели быстрого доступа
Ускорить специальную вставку можно, если добавить на панель быстрого доступа в левый верхний угол окна кнопку Вставить как значения. Для этого выберите Файл — Параметры — Панель быстрого доступа (File — Options — Customize Quick Access Toolbar) . В открывшемся окне выберите Все команды (All commands) в выпадающем списке, найдите кнопку Вставить значения (Paste Values) и добавьте ее на панель:
Теперь после копирования ячеек с формулами будет достаточно нажать на эту кнопку на панели быстрого доступа:
Кроме того, по умолчанию всем кнопкам на этой панели присваивается сочетание клавиш Alt + цифра (нажимать последовательно). Если нажать на клавишу Alt , то Excel подскажет цифру, которая за это отвечает:
Способ 5. Макросы для выделенного диапазона, целого листа или всей книги сразу
Если вас не пугает слово «макросы», то это будет, пожалуй, самый быстрый способ.
Макрос для превращения всех формул в значения в выделенном диапазоне (или нескольких диапазонах, выделенных одновременно с Ctrl) выглядит так:
Если вам нужно преобразовать в значения текущий лист, то макрос будет таким:
И, наконец, для превращения всех формул в книге на всех листах придется использовать вот такую конструкцию:
Код нужных макросов можно скопировать в новый модуль вашего файла (жмем Alt + F11 чтобы попасть в Visual Basic, далее Insert — Module). Запускать их потом можно через вкладку Разработчик — Макросы (Developer — Macros) или сочетанием клавиш Alt + F8 . Макросы будут работать в любой книге, пока открыт файл, где они хранятся. И помните, пожалуйста, о том, что действия выполненные макросом невозможно отменить — применяйте их с осторожностью.
Способ 6. Для ленивых
Если ломает делать все вышеперечисленное, то можно поступить еще проще — установить надстройку PLEX, где уже есть готовые макросы для конвертации формул в значения и делать все одним касанием мыши:
- всё будет максимально быстро и просто
- можно откатить ошибочную конвертацию отменой последнего действия или сочетанием Ctrl + Z как обычно
- в отличие от предыдущего способа, этот макрос корректно работает, если на листе есть скрытые строки/столбцы или включены фильтры
- любой из этих команд можно назначить любое удобное вам сочетание клавиш в Диспетчере горячих клавиш PLEX
Источник
Как заменить формулу на значение excel vba
Модератор форума: китин, _Boroda_
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос Replace_by_VAL — заменить формулы на значения (Помогите «допилить» макрос, пожалуйста)
Макрос Replace_by_VAL — заменить формулы на значения
Alex_ST | Дата: Понедельник, 06.05.2013, 17:09 | Сообщение № 1 | ||||
|
|||||
28.01.2021, 17:19 #3
28.01.2021, 17:56 #4
они просто «утонут» в море информации, не имея опыта быстрой отфильтрации лишнего «шлака».
Источник
Printing values instead of the formulas themselves can help protect your IP or prevent users from changing them. In this article, we’re going to show you how to have Excel convert formula to value using VBA.
How to have Excel convert formula to value
We can check each cell using a For Each…Next loop. Below you will find 3 examples using the loop that check cells in a selected area, in the entire worksheet, and all worksheets in a workbook.
After identifying the cells, we can check whether they contain formulas using the HasFormula property. This returns a Boolean value. If the HasFormula returns TRUE, then our code overwrites the formula by setting the cell value into the Formula property of the cell.
rng.Formula = rng.Value
First, you need to add the module into the workbook or the add-in file. Copy and paste the code into the module to run it. The main advantage of the module method is that it allows saving the code in the file, so that it can be used again later. Furthermore, the subroutines in modules can be used by icons in the menu ribbons or keyboard shortcuts. Remember to save your file in either XLSM or XLAM format to save your VBA code.
Convert formulas to values in a selected range
Sub ConvertFormulasToValuesInSelection() Dim rng As Range For Each rng In Selection If rng.HasFormula Then rng.Formula = rng.Value End If Next rng End Sub
Convert formulas to values in active worksheet
Sub ConvertFormulasToValuesInActiveWorksheet() Dim rng As Range For Each rng In ActiveSheet.UsedRange If rng.HasFormula Then rng.Formula = rng.Value End If Next rng End Sub
Convert formulas to values in all worksheets
Sub ConvertFormulasToValuesAllWorksheets() Dim ws As Worksheet, rng As Range For Each ws In ActiveWorkbook.Worksheets For Each rng In ws.UsedRange If rng.HasFormula Then rng.Formula = rng.Value End If Next rng Next ws End Sub
Skip to content
На чтение 3 мин. Просмотров 3.5k.
Что делает макрос: Этот макрос помогает преобразовать все формулы в заданном диапазоне в значения.
Содержание
- Как макрос работает
- Код макроса
- Как этот код работает
- Как использовать
Как макрос работает
В этом макросе, мы используем две переменные объекта Range. Одна из переменных отражает объем данных, с которым мы работаем, другая использует диапазон для хранения каждой отдельной ячейки. Каждый раз, когда активируется ячейка, мы проверяем, содержит ли
она формулу. Если это так, мы заменим формулу значением, которое отображается в ячейке.
Код макроса
Sub PreobrazovatFormuliVZnacheniya() 'Щаг 1: Объявляем переменные Dim MyRange As Range Dim MyCell As Range 'Шаг 2: Сохраните книгу прежде, чем измените ячейки? Select Case MsgBox("Перед изменением ячеек" & _ "Сохранить книгу?", vbYesNoCancel) Case Is = vbYes ThisWorkbook.Save Case Is = vbCancel Exit Sub End Select 'Шаг 3: Определяем целевой диапазон Set MyRange = Selection 'Шаг 4: Запускаем цикл по диапазону For Each MyCell In MyRange 'Шаг 5: Если в ячейке есть формула, устанавливаем значение If MyCell.HasFormula Then MyCell.Formula = MyCell.Value End If 'Шаг 6: Получаем следующую ячейку в диапазоне Next MyCell End Sub
Как этот код работает
- Шаг 1 объявляет две переменные объекта Range.
- При выполнении макрос уничтожает стек отката. Это означает, что вы не сможете отменить изменения, поэтому нужно сохранить книгу перед запуском макроса. Это делает Шаг 2.
- Здесь мы вызываем окно сообщения, которое спрашивает, хотим ли мы сохранить книгу в первую очередь. Затем он дает нам три варианта: Да, Нет и Отмена. Щелчок Да сохраняет книгу и продолжает с помощью макроса. Нажатие кнопки Отмена выходит из процедуры без запуска макроса. Щелчок Нет запускает макрос без сохранения рабочей книги.
- Шаг 3 заполняет переменную MyRange с целевым диапазоном. В этом примере мы используем выбранный диапазон — диапазон, который был выбран в электронной таблице. Вы можете легко установить переменную MyRange в определенном диапазоне, таком как Range («A1:Z100»). Кроме того, если ваш целевой диапазон является именованный диапазон, вы можете просто ввести его имя: Range («MyNamedRange»).
- тот этап начинает цикл через каждую ячейку в целевом диапазоне, активизируя каждую ячейку. После того, как ячейка активируется, макрос использует свойство HasFormula, чтобы проверить, содержит ли ячейка формулу. Если содержит, мы устанавливаем ячейку равную значению, которое отображается в ячейке. Это эффективно заменяет формулу с жестко предопределенным значением.
- Шаг 6 повторяет цикл, чтобы получить следующую ячейку. После просмотра всех ячеек в целевом диапазоне макрос заканчивается.
Как использовать
Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:
- Активируйте редактор Visual Basic, нажав ALT + F11 на клавиатуре.
- Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
- Выберите Insert➜Module.
- Введите или вставьте код.
Dez089 Пользователь Сообщений: 17 |
#1 27.03.2021 18:52:05 Доброго времени суток. https://www.planetaexcel.ru/techniques/11/215/
Некорректно отображаются результаты вычислений с умной таблицы. Так же попробовал прописать каждый лист в ручную:
Но при таком раскладе вообще получается не пойми что(значения формул выводит туда, где их даже нет) Кто-нибудь сталкивался с подобным? Есть ли возможность добавить лист с умной таблицей в «исключения»? Пример прикрепил. P.s. Excel 2019 Pro, лицензия. Прикрепленные файлы
|
||||
Kuzmich Пользователь Сообщений: 7998 |
#2 27.03.2021 19:42:34 Dez089,
|
||
Dez089 Пользователь Сообщений: 17 |
Kuzmich, Умная таблица в книге одна и довольно большая, с неё тянуться данные в другие листы. В не табличные формы, в которых происходят различные вычисления. К сожалению нет возможности преобразовать каждый не табличный лист в умную таблицу для выполнения Вашего макроса. |
Kuzmich Пользователь Сообщений: 7998 |
#4 27.03.2021 20:10:40 Dez089,
Изменено: Kuzmich — 27.03.2021 20:30:30 |
||
Dez089 Пользователь Сообщений: 17 |
#5 27.03.2021 20:43:27 Kuzmich,
Таким образом всё равно необходимо преобразовать таблицу на листе 3 в умную. В книге множество листов разных форм и нет возможности отредактировать каждый файл под умную таблицу. Отредактировал пример(см. Лист 3). Прикрепленные файлы
|
||
Kuzmich Пользователь Сообщений: 7998 |
#6 27.03.2021 20:52:02
|
||
Dez089 Пользователь Сообщений: 17 |
#7 27.03.2021 20:54:28 Kuzmich, потрясающие. Низкий поклон и море благодарности! |