Way 1 (Courtesy @rdhs)
Sub Sample()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("DTMGIS")
ws.UsedRange.Value = ws.UsedRange.Value
End Sub
Way 2 Using Copy - PasteSpecial - Values
Sub Sample()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("DTMGIS")
With ws.UsedRange
.Copy
.PasteSpecial Paste:=xlPasteValues, _
Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
End With
End Sub
Way 3 Using SpecialCells
Sub Sample()
Dim ws As Worksheet
Dim rng As Range
Set ws = ThisWorkbook.Sheets("DTMGIS")
On Error Resume Next
Set rng = ws.Cells.SpecialCells(xlCellTypeFormulas)
On Error GoTo 0
If Not rng Is Nothing Then
rng.Value = rng.Value
End If
End Sub
danka Пользователь Сообщений: 67 |
Добрый день. Ребята я наверное достал вас со своими вопросами, блин ну всегда обращаюсь только по крайней необходимости. Сегодня готовил отчетную ведомость вышло около 2000 строк. После чего мне нужно было удалить автоматически формулы и оставить их значения со всей книги, я воспользовался макросом, который находится в примере, он удалил формулы и оставил их значения, но вот в чем проблема, в формуле по условию получалось значение «3.1», а после выполнения макросом получилось «3,1». Ребята помогите, как быть. Плиззз!!! |
Nic70y Пользователь Сообщений: 3289 Win7 MSO 2013 |
Если в ячейках с формулами установить текстовый формат — то работает. |
danka Пользователь Сообщений: 67 |
В этом то и проблема формул больше 1000 |
danka Пользователь Сообщений: 67 |
|
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
Файл не смотрел, но, если у Вас там используется .value — попробуйте .text |
Serge 007 Гость |
#6 25.06.2013 20:03:32
Ну дык и установим его
|
||||
danka Пользователь Сообщений: 67 |
Не подскажите, в чем разница между моим макросом(я его записал макрорекордером), и вашим, чисто из любопытства |
danka Пользователь Сообщений: 67 |
А так огромнейшее спасибо за помощь. Я думал вся моя работа пойдет под хвост. Изменено: danka — 25.06.2013 20:13:41 |
Serge 007 Гость |
#9 25.06.2013 20:21:29
Нет никакого «моего» макроса, я взял его из Вашего файла и немного подкорректировал Разница — во всём. Это два совершенно разных макроса. Что именно Вы хотите услышать в ответ на Ваш вопрос? |
||
danka Пользователь Сообщений: 67 |
Каким лучше пользоваться, какой быстрее. |
Лучше, быстрее, универсальнее и правильнее All_Formulas_To_Values_In_All_Sheets |
|
danka Пользователь Сообщений: 67 |
Всё спасибо, значит буду пользоваться ей. |
Serge 007 Гость |
#13 25.06.2013 20:42:27
Надеюсь «ей» — это процедурой, а не макросом? |
||
danka Пользователь Сообщений: 67 |
Будем надеится |
danka Пользователь Сообщений: 67 |
Испытал макрос, работает отлично. Но теперь возникла другая проблема. В рассчетах цифры получались например 82,6, а после выполнения макросом 82,5588001734408. |
danka Пользователь Сообщений: 67 |
Вручную, их слишком много. А макросом незнаю как,наверно никак. |
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#18 25.06.2013 21:09:50 Не могу не отметить тот факт, что коды взяты с моего сайта Чтобы округлить сначала определитесь, что важнее — точное совпадение вычислений на листе или округление. Ведь если тупо округлить значения, то какие-то ячейки, участвующие ранее в вычислениях будут давать неверный результат.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||
Serge 007 Гость |
#19 25.06.2013 21:12:26
Дим, я из файла ТС брал |
||
danka Пользователь Сообщений: 67 |
Хотел как быстрее и лучше сделать работу. Но надобыло на начальной стадии задаться этим вопросом. просто получается у меня выводит формулы значения «формат общий», а какието числовой число десятичных знаков либо 1, либо2. А может мне сделать так, попробывать макрос записанный макрорекордером, он у меня выводит значения, а потом воспользоваться вашим макросом не много переделанным Serge 007. |
Михаил С. Пользователь Сообщений: 10514 |
#21 25.06.2013 21:26:10
Попробуйте добавить в макрос две строчки:
в насчале макроса и
в конце. Может сработает. |
||||||
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#22 25.06.2013 22:02:40
Так я ничего против-то не имею ни к ТС, ни тем более к тебе. Так, отметил мимоходом(уж слишком подозрительно знакомый код увидел просто) Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||
danka Пользователь Сообщений: 67 |
#23 25.06.2013 22:06:48 Кому интересно. Вообщем, нашел решение, записал макрос (выделил все листы в книги кнопкой shift, выделил весь лист1, соответственно выделились так же другие листы, копировать, спец. вставка вставить зачения, убрал выделение с листов, остановил запись. И вот, что получилось:
Вроде работает. |
||
danka Пользователь Сообщений: 67 |
Если есть другие придложения или замечания, с радостью прочитаю. А так спосибо всем, за то что обратили на мою тему, было очень приятно. Изменено: danka — 25.06.2013 22:10:46 |
vikttur Пользователь Сообщений: 47199 |
#25 25.06.2013 22:37:11 Есть прИдложение: в сообщении оформляйте код соответствующим тэгом (кнопочка над полем для сообщения) |
Хитрости »
12 Май 2011 364009 просмотров
Как удалить в ячейке формулу, оставив значения?
Иногда формула в ячейке нужна лишь на короткое время — только для получения результата. А затем уже не нужна ни сама формула, ни ячейки, на которые она ссылается. Но вот беда — если удалить ячейки, то формула «ломается», как это говорится. Т.е. в ячейке получается либо #ЗНАЧ! либо #ССЫЛКА!. Или Вам надо просто зафиксировать значение, полученное в результате работы формулы. Т.е. чтобы формулы там не было, а было только значение. Как ни странно, но делается это проще простого:
Выделяете ячейку/несколько ячеек с формулами — Копируете — Правая кнопка мыши — Специальная вставка — Значения
Вот и все. Больше формул нет.
Так же подобное можно сделать при помощи кода VBA:
Sub Formulas_To_Values() Selection.Value = Selection.Value End Sub
Для использования кода переходим в редактор VBA(Alt+F11) —Insert —Module и вставляем приведенный код. Чтобы выполнить код надо на листе нажать сочетание клавиш Alt+F8, выбрать нужный код и нажать Выполнить
Данный код заменяет формулы в выделенном диапазоне на значения. Только необходимо учитывать, что выделенный диапазон должен быть неразрывным. Иначе код выдаст ошибку. А такой код
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_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
КАК БЫСТРО ВЫЗЫВАТЬ:
Вообще данную команду можно вывести на Быструю панель и использовать в одно нажатие тогда, когда нужно.
- 2010 Excel Файл— Параметры— Настройка. Выбрать команды из: Все команды. Находите команду Вставить значения и добавляете;
- 2007 Excel Меню— Параметры Excel— Настройка. Выбрать команды из: Все команды. Находите команду Вставить значения и добавляете;
- 2003 Excel: Сервис— Настройка— вкладка Команды— категория Правка— Вставить значения.
Теперь у Вас появится значок на Быстрой панели.
ДОБАВИТЬ В КОНТЕКСТНОЕ МЕНЮ ЯЧЕЕК:
Если один раз выполнить код:
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
ссылки
статистика
Удалить формулы на любом листе. |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
- Удалить формулы и сохранить данные
- С помощью мыши
- С помощью клавиатуры (сочетания клавиш)
- Перевод формул в их текст (без сохранения результирующих значений)
- В видимых ячейках, пропуская скрытые фильтром
- Удалить формулы на листе / во всех листах
- Удаление формул надстройкой !SEMTools
Удалить формулы в Excel можно множеством способов, каждый из которых сильно зависит от поставленной задачи. Как правило, при этом требуется сохранить в ячейках какие-то значения. Вариантов два:
- это значения, вычисленные этими формулами,
- сам текст формул.
Помимо вопроса о том, что оставить в ячейках после удаления формул, могут быть и другие вводные, такие как:
- Где удалять формулы:
- в диапазоне,
- во всем листе,
- во всей книге.
- Нужно ли удалять формулы в скрытых/отфильтрованных строках.
Эта статья даст ответы на все вопросы выше.
Удалить формулы и сохранить данные
Наиболее распространенная задача — когда нужно оставить в ячейке результат формулы, а саму формулу удалить. В понимании Excel результат формулы является значением ячейки.
Так вот, чтобы перевести формулы в значения, нужно:
- Выделить нужный диапазон ячеек (или одну ячейку, всю строку, столбец или весь лист).
- Скопировать выделенное.
- Вставить процедурой вставки “как значения”.
Можно сделать это клавишами мыши или клавиатуры — суть процедуры от этого не меняется.
С помощью мыши
Не самый быстрый (так как работает только одна рука), но самый удобный и понятный способ. Выделяем, копируем и в контекстном меню (вызывается нажатием правой кнопки мыши по выделенному диапазону) команду со скриншота:
С помощью клавиатуры (сочетания клавиш)
Копирование делается в соседний столбец или другую книгу. Я предпочитаю этот способ, хоть он и экономит лишь секунды.
Пошагово:
- Выделяем диапазон:
- мышью, если это столбец, строка или лист,
- сочетаниями Ctrl + Shift + стрелки или Shift + стрелки, если ячейки или диапазоны ячеек.
- Копируем сочетанием Ctrl + C.
- Перемещаемся стрелками к диапазону, куда нужно вставить данные, и/или нажимаем Ctrl + Tab для перехода в другую книгу.
- Вызываем контекстное меню клавишей на клавиатуре. Иногда ее нет, но обычно на клавиатурах она расположена рядом с правым Alt.
- Стрелками перемещаемся к команде (Вниз-вниз-вправо).
- Нажимаем Enter.
Может показаться, что тут целых 6 шагов и это долго, но попробуйте приловчиться и сравнить работу на больших диапазонах ячеек — мышью будет точно дольше.
Перевод формул в их текст (без сохранения результирующих значений)
Иногда требуется для демонстрационных целей преобразовать ячейки, оставив текст формул. В таких случаях полезной будет процедура замены.
В видимых ячейках, пропуская скрытые фильтром
Вот здесь при использовании стандартных решений уже могут возникнуть проблемы. Процедура вставки “как значения” даст сбой и повредит данные, если в копируемом диапазоне есть отфильтрованные строки.
Вот код VBA-процедуры, который позволяет обойти проблему:
Sub remFormulas()
Dim cell As Range
For Each cell In Selection
If Not (cell.EntireRow.Hidden = True Or cell.EntireColumn.Hidden = True) Then
cell.Value2 = cell.Value2
End If
Next cell
End Sub
Он отработает на отлично, как и та же процедура надстройки. В синтаксисе кода присутствует проверка ячеек на предмет того, скрыты ли они.
Удалить формулы на листе / во всех листах
Когда нужно быстро избавиться от всех формул на листе или во всей книге, также могут помочь соответствующие простенькие процедуры, написанные на VBA:
Sub удалитьФормулыСоВсегоЛиста()
ActiveSheet.UsedRange.Value2 = ActiveSheet.UsedRange.Value2
End Sub
Sub удалитьФормулыИзВсейКниги()
Dim w As Worksheet
For Each w In Worksheets
With w.UsedRange
.Value = .Value
End With
Next w
End Sub
Ими можно воспользоваться без внедрения в свои файлы, подключив надстройку !SEMTools.
Удаление формул надстройкой !SEMTools
Быструю замену формул на значения в выделенном диапазоне без необходимости копирования и особой вставки я реализовал в своей надстройке для Excel !SEMTools.
Для тех, кто не готов разбираться в VBA, после установки !SEMTools запуск процедуры доступен в два клика из соответствующего меню в группе «УДАЛИТЬ». Функционал относится к бесплатным возможностям !SEMTools (работают без ограничений в любой версии).
Хотите так же быстро удалять формулы в Excel?
!SEMTools ускорит эту и сотни других задач!