danka Пользователь Сообщений: 67 |
Добрый день. Ребята я наверное достал вас со своими вопросами, блин ну всегда обращаюсь только по крайней необходимости. Сегодня готовил отчетную ведомость вышло около 2000 строк. После чего мне нужно было удалить автоматически формулы и оставить их значения со всей книги, я воспользовался макросом, который находится в примере, он удалил формулы и оставил их значения, но вот в чем проблема, в формуле по условию получалось значение «3.1», а после выполнения макросом получилось «3,1». Ребята помогите, как быть. Плиззз!!! |
Nic70y Пользователь Сообщений: 3289 Win7 MSO 2013 |
Если в ячейках с формулами установить текстовый формат — то работает. |
danka Пользователь Сообщений: 67 |
В этом то и проблема формул больше 1000 |
danka Пользователь Сообщений: 67 |
|
Юрий М Модератор Сообщений: 60588 Контакты см. в профиле |
Файл не смотрел, но, если у Вас там используется .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 Пользователь Сообщений: 14183 Профессиональная разработка приложений для 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 Пользователь Сообщений: 14183 Профессиональная разработка приложений для 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 Есть прИдложение: в сообщении оформляйте код соответствующим тэгом (кнопочка над полем для сообщения) |
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
Удалить формулы на любом листе. |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Содержание
- Как удалить в ячейке формулу, оставив значения?
- Как удалить в ячейке формулу, оставив значения?
- Как удалить в ячейке формулу, оставив значения?
- Vba excel удалить формулу
Как удалить в ячейке формулу, оставив значения?
Иногда формула в ячейке нужна лишь на короткое время — только для получения результата. А затем уже не нужна ни сама формула, ни ячейки, на которые она ссылается. Но вот беда — если удалить ячейки, то формула «ломается», как это говорится. Т.е. в ячейке получается либо #ЗНАЧ! либо #ССЫЛКА! . Или Вам надо просто зафиксировать значение, полученное в результате работы формулы. Т.е. чтобы формулы там не было, а было только значение. Как ни странно, но делается это проще простого:
Выделяете ячейку/несколько ячеек с формулами — Копируете — Правая кнопка мыши — Специальная вставка — Значения
Вот и все. Больше формул нет.
Так же подобное можно сделать при помощи кода 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
то в контекстном меню мыши появится команда — «Вставить значения». Она полностью дублирует стандартную, только вызвать её быстрее — одно нажатие и все.
Статья помогла? Поделись ссылкой с друзьями!
Источник
Как удалить в ячейке формулу, оставив значения?
Иногда формула в ячейке нужна лишь на короткое время — только для получения результата. А затем уже не нужна ни сама формула, ни ячейки, на которые она ссылается. Но вот беда — если удалить ячейки, то формула «ломается», как это говорится. Т.е. в ячейке получается либо #ЗНАЧ! либо #ССЫЛКА! . Или Вам надо просто зафиксировать значение, полученное в результате работы формулы. Т.е. чтобы формулы там не было, а было только значение. Как ни странно, но делается это проще простого:
Выделяете ячейку/несколько ячеек с формулами — Копируете — Правая кнопка мыши — Специальная вставка — Значения
Вот и все. Больше формул нет.
Так же подобное можно сделать при помощи кода 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
то в контекстном меню мыши появится команда — «Вставить значения». Она полностью дублирует стандартную, только вызвать её быстрее — одно нажатие и все.
Статья помогла? Поделись ссылкой с друзьями!
Источник
Как удалить в ячейке формулу, оставив значения?
Иногда формула в ячейке нужна лишь на короткое время — только для получения результата. А затем уже не нужна ни сама формула, ни ячейки, на которые она ссылается. Но вот беда — если удалить ячейки, то формула «ломается», как это говорится. Т.е. в ячейке получается либо #ЗНАЧ! либо #ССЫЛКА! . Или Вам надо просто зафиксировать значение, полученное в результате работы формулы. Т.е. чтобы формулы там не было, а было только значение. Как ни странно, но делается это проще простого:
Выделяете ячейку/несколько ячеек с формулами — Копируете — Правая кнопка мыши — Специальная вставка — Значения
Вот и все. Больше формул нет.
Так же подобное можно сделать при помощи кода 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
то в контекстном меню мыши появится команда — «Вставить значения». Она полностью дублирует стандартную, только вызвать её быстрее — одно нажатие и все.
Статья помогла? Поделись ссылкой с друзьями!
Источник
Vba excel удалить формулу
Модератор форума: китин, _Boroda_
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Удаление формул автоматически (Программа для создания копий Excel без формул, со значениями)
Удаление формул автоматически
Гость | Дата: Суббота, 07.05.2011, 01:09 | Сообщение № 1 | |||||||||||||||||||||||
|
The Range.SpecialCells method has xlCellTypeFormula
as one of the xlCellType constants to look for. That may significantly reduce the cells to cycle through as opposed to using the Range .HasFormula property or the Range.Find method looking for =*
within the UsedRange property.
Option Explicit
Sub enumFormulas()
Dim f As Long, w As Long, ws As Worksheet
Dim fws As String, rng As Range, allFormulas As Range
Dim vPROPs As Variant
On Error GoTo bm_Safe_Exit
appTGGL
fws = "Formulas"
On Error GoTo bm_New_List_ws
Set ws = Sheets(fws)
On Error GoTo bm_Safe_Exit
For w = 1 To Worksheets.Count
With Worksheets(w)
If LCase(.Name) = LCase(fws) Then GoTo bm_Next_ws
On Error Resume Next
Set allFormulas = .Cells.SpecialCells(xlCellTypeFormulas, 23)
On Error GoTo bm_Safe_Exit
If Not allFormulas Is Nothing Then
For Each rng In allFormulas
With rng
vPROPs = Array(.Parent.Name, _
.Address(0, 0), _
.Value, _
.Value2, _
.Text, _
.Formula, _
.FormulaR1C1, _
.NumberFormat)
End With
With ws.Cells(Rows.Count, 1).End(xlUp) _
.Offset(1, 0).Resize(1, UBound(vPROPs))
.NumberFormat = "@"
.Offset(0, 2).Resize(1, 1).NumberFormat = vPROPs(UBound(vPROPs))
.Offset(0, 3).Resize(1, 1).NumberFormat = "General"
.Value2 = vPROPs
End With
Next
End If
bm_Next_ws:
End With
Next w
GoTo bm_Safe_Exit
bm_New_List_ws:
If Err.Number = 9 Then
vPROPs = Array("Worksheet", ",Address", ".Value", ".Value2", ".Text", ".Formula", ".FormulaR1C1")
Worksheets.Add after:=Sheets(Sheets.Count)
With Sheets(Sheets.Count)
.Name = fws
.Cells(1, 1).Resize(1, UBound(vPROPs) + 1) = vPROPs
End With
Resume
End If
bm_Safe_Exit:
appTGGL
End Sub
Sub appTGGL(Optional bTGGL As Boolean = True)
Application.Calculation = IIf(bTGGL, xlCalculationAutomatic, xlCalculationManual)
Application.EnableEvents = bTGGL
Application.DisplayAlerts = bTGGL
Application.ScreenUpdating = bTGGL
Application.Cursor = IIf(bTGGL, xlDefault, xlWait)
End Sub
The Range object with its Range.Cells property have numerous properties and other valid information for documenting a Worksheet object or a Worksheets collection.