Удаление формул vba excel

 

danka

Пользователь

Сообщений: 67
Регистрация: 16.06.2013

Добрый день. Ребята я наверное достал вас со своими вопросами, блин ну всегда обращаюсь только по крайней необходимости. Сегодня готовил отчетную ведомость вышло около 2000 строк. После чего мне нужно было удалить автоматически формулы и оставить их значения со всей книги, я воспользовался макросом, который находится в примере, он удалил формулы и оставил их значения, но вот в чем проблема, в формуле по условию получалось значение «3.1», а после выполнения макросом получилось «3,1». Ребята помогите, как быть. Плиззз!!! :)

 

Nic70y

Пользователь

Сообщений: 3289
Регистрация: 22.12.2012

Win7 MSO 2013

Если в ячейках с формулами установить текстовый формат — то работает.
В макросах не понимаю — почему не знаю.

 

danka

Пользователь

Сообщений: 67
Регистрация: 16.06.2013

В этом то и проблема формул больше 1000

 

danka

Пользователь

Сообщений: 67
Регистрация: 16.06.2013

 

Юрий М

Модератор

Сообщений: 60588
Регистрация: 14.09.2012

Контакты см. в профиле

Файл не смотрел, но, если у Вас там используется .value — попробуйте .text

 

Serge 007

Гость

#6

25.06.2013 20:03:32

Цитата
Nic70y пишет:
Если в ячейках с формулами установить текстовый формат — то работает.

Ну дык и установим его :)

Код
Sub All_Formulas_To_Values_In_All_Sheets()
    Dim wsSh As Worksheet
    For Each wsSh In Sheets
    wsSh.UsedRange.NumberFormat = "@"
        wsSh.UsedRange.Value = wsSh.UsedRange.Value
    Next wsSh
End Sub
 

danka

Пользователь

Сообщений: 67
Регистрация: 16.06.2013

Не подскажите, в чем разница между моим макросом(я его записал макрорекордером), и вашим, чисто из любопытства
Sub Макрос4()
   Sheets(Array(«Лист1», «Лист2», «Лист3»)).Select
   Sheets(«Лист1»).Activate
   Cells.Select
   Selection.Copy
   Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
       :=False, Transpose:=False
   Range(«A1»).Select
   ActiveSheet.Paste
   Application.CutCopyMode = False
   Sheets(«Лист1»).Select
   Range(«A1»).Select
End Sub

 

danka

Пользователь

Сообщений: 67
Регистрация: 16.06.2013

А так огромнейшее спасибо за помощь. Я думал вся моя работа пойдет под хвост.

Изменено: danka25.06.2013 20:13:41

 

Serge 007

Гость

#9

25.06.2013 20:21:29

Цитата
danka пишет:
в чем разница между моим макросом(я его записал макрорекордером), и вашим

Нет никакого «моего» макроса, я взял его из Вашего файла и немного подкорректировал :)

Разница — во всём. Это два совершенно разных макроса. Что именно Вы хотите услышать в ответ на Ваш вопрос?

 

danka

Пользователь

Сообщений: 67
Регистрация: 16.06.2013

Каким лучше пользоваться, какой быстрее.

 

Лучше, быстрее, универсальнее и правильнее All_Formulas_To_Values_In_All_Sheets

 

danka

Пользователь

Сообщений: 67
Регистрация: 16.06.2013

Всё спасибо, значит буду пользоваться ей.

 

Serge 007

Гость

#13

25.06.2013 20:42:27

Цитата
danka пишет:
буду пользоваться ей

Надеюсь «ей» — это процедурой, а не макросом?  :D

 

danka

Пользователь

Сообщений: 67
Регистрация: 16.06.2013

Будем надеится :D

 

danka

Пользователь

Сообщений: 67
Регистрация: 16.06.2013

Испытал макрос, работает отлично. Но теперь возникла другая проблема. В рассчетах цифры получались например 82,6, а после выполнения макросом 82,5588001734408.

 
 

danka

Пользователь

Сообщений: 67
Регистрация: 16.06.2013

Вручную, их слишком много. А макросом незнаю как,наверно никак.

 

The_Prist

Пользователь

Сообщений: 14183
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#18

25.06.2013 21:09:50

Не могу не отметить тот факт, что коды взяты с моего сайта :-)

Чтобы округлить сначала определитесь, что важнее — точное совпадение вычислений на листе или округление. Ведь если тупо округлить значения, то какие-то ячейки, участвующие ранее в вычислениях будут давать неверный результат.
Лучше просто примените формат к ячейкам и до, и после:

Цитата
Sub All_Formulas_To_Values_In_All_Sheets()
   Dim wsSh As Worksheet
   For Each wsSh In Sheets
       wsSh.UsedRange.NumberFormat = «@»
       wsSh.UsedRange.Value = wsSh.UsedRange.Value
       wsSh.UsedRange.NumberFormat = «0.00»
   Next wsSh
End Sub

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Serge 007

Гость

#19

25.06.2013 21:12:26

Цитата
The_Prist пишет:
основа кода и название процедуры(All_Formulas_To_Values_In_All_Sheets) взяты с моего сайта.

Дим, я из файла ТС брал

 

danka

Пользователь

Сообщений: 67
Регистрация: 16.06.2013

Хотел как быстрее и лучше сделать работу. Но надобыло на начальной стадии задаться этим вопросом. просто получается у меня выводит формулы значения «формат общий», а какието числовой число десятичных знаков либо 1, либо2. А может мне сделать так, попробывать макрос записанный макрорекордером, он у меня выводит значения, а потом воспользоваться вашим макросом не много переделанным Serge 007.

 

Михаил С.

Пользователь

Сообщений: 10514
Регистрация: 21.12.2012

#21

25.06.2013 21:26:10

Цитата
danka пишет:
В рассчетах цифры получались например 82,6, а после выполнения макросом 82,5588001734408.

Попробуйте добавить в макрос две строчки:

Код
ActiveWorkbook.PrecisionAsDisplayed = True

в насчале макроса и

Код
ActiveWorkbook.PrecisionAsDisplayed = False

в конце. Может сработает.

 

The_Prist

Пользователь

Сообщений: 14183
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#22

25.06.2013 22:02:40

Цитата
Serge 007 пишет:
Дим, я из файла ТС брал

Так я ничего против-то не имею ни к ТС, ни тем более к тебе. Так, отметил мимоходом(уж слишком подозрительно знакомый код увидел просто) :-)

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

danka

Пользователь

Сообщений: 67
Регистрация: 16.06.2013

#23

25.06.2013 22:06:48

Кому интересно. Вообщем, нашел решение, записал макрос (выделил все листы в книги кнопкой shift, выделил весь лист1, соответственно выделились так же другие листы, копировать, спец. вставка вставить зачения, убрал выделение с листов, остановил запись. И вот, что получилось:

Код
Sub Макрос1()
 Range("A1").Select
 Sheets(Array("Лист1", "Лист2", "Лист3")).Select
 Sheets("Лист1").Activate
 Cells.Select
 Selection.Copy
 Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
 :=False, Transpose:=False
 Range("A1").Select
 Application.CutCopyMode = False
 ActiveCell.FormulaR1C1 = ""
 Range("A1") .Select
 Sheets("Лист1") .Select
End Sub

Вроде работает.

 

danka

Пользователь

Сообщений: 67
Регистрация: 16.06.2013

Если есть другие придложения или замечания, с радостью прочитаю. А так спосибо всем, за то что обратили на мою тему, было очень приятно.

Изменено: danka25.06.2013 22:10:46

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

#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

Удалить формулы на любом листе.

Mark1976

Дата: Вторник, 15.12.2020, 21:45 |
Сообщение № 1

Группа: Проверенные

Ранг: Ветеран

Сообщений: 687


Репутация:

3

±

Замечаний:
0% ±


Excel 2010, 2013

Здравствуйте. Есть макрос [vba]

Код

Sub Удалить_выделенные_формулы()
‘преобразование формул в значения в выделенном диапазоне(ах)
    Dim smallrng As Range
    For Each smallrng In Selection.Areas
        smallrng.Value = smallrng.Value
    Next smallrng
End Sub

[/vba]
Данный макрос удаляет формулы в выделенном диапазоне. У меня 4 листа в книге, кнопка на 1 листе. Надо чтобы при выделении формулы на любом листе и запуске макроса с первого листа формулы удалялись на любом листе. Заранее спасибо за решение.

К сообщению приложен файл:

3931878.xls
(82.0 Kb)

 

Ответить

Pelena

Дата: Вторник, 15.12.2020, 21:52 |
Сообщение № 2

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Здравствуйте.
Вынесите кнопку на Панель быстрого доступа


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

Mark1976

Дата: Вторник, 15.12.2020, 21:58 |
Сообщение № 3

Группа: Проверенные

Ранг: Ветеран

Сообщений: 687


Репутация:

3

±

Замечаний:
0% ±


Excel 2010, 2013

Pelena, ок. А у других пользователей, кто откроет данный файл тоже данная кнопка будет на панели? С файлом будут работать много пользователей.

Сообщение отредактировал Mark1976Вторник, 15.12.2020, 22:03

 

Ответить

Pelena

Дата: Вторник, 15.12.2020, 22:10 |
Сообщение № 4

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

С файлом будут работать много пользователей

об этом в первом посте ничего не было. Как макрос должен узнать, с каким листом работать?


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

Mark1976

Дата: Вторник, 15.12.2020, 22:13 |
Сообщение № 5

Группа: Проверенные

Ранг: Ветеран

Сообщений: 687


Репутация:

3

±

Замечаний:
0% ±


Excel 2010, 2013

Елена, стирать данные надо на этих листах: Приложение Согаз, Приложение Макс-М, Приложение Капитал.

 

Ответить

Pelena

Дата: Вторник, 15.12.2020, 22:17 |
Сообщение № 6

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

То есть перебрать все листы и в выделенных диапазонах заменить формулы на значения?


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

Mark1976

Дата: Вторник, 15.12.2020, 22:19 |
Сообщение № 7

Группа: Проверенные

Ранг: Ветеран

Сообщений: 687


Репутация:

3

±

Замечаний:
0% ±


Excel 2010, 2013

Pelena, получается, что да.

 

Ответить

Mark1976

Дата: Вторник, 15.12.2020, 22:21 |
Сообщение № 8

Группа: Проверенные

Ранг: Ветеран

Сообщений: 687


Репутация:

3

±

Замечаний:
0% ±


Excel 2010, 2013

Pelena, почему такая сложность, так как кнопку на каждом листе надо удалять перед тем как распечатать, так как она тоже печатается.

 

Ответить

Pelena

Дата: Вторник, 15.12.2020, 22:22 |
Сообщение № 9

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

[vba]

Код

Sub Удалить_выделенные_формулы()
‘преобразование формул в значения в выделенном диапазоне(ах)
    Dim smallrng As Range, sh As Worksheet
    Application.ScreenUpdating = False
    For Each sh In Worksheets
        sh.Activate
        For Each smallrng In Selection.Areas
            smallrng.Value = smallrng.Value
        Next smallrng
    Next sh
    Application.ScreenUpdating = True
End Sub

[/vba]


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

Mark1976

Дата: Вторник, 15.12.2020, 22:26 |
Сообщение № 10

Группа: Проверенные

Ранг: Ветеран

Сообщений: 687


Репутация:

3

±

Замечаний:
0% ±


Excel 2010, 2013

Спасибо Елена, это то, что надо.

 

Ответить

RAN

Дата: Среда, 16.12.2020, 10:25 |
Сообщение № 11

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

-Как ребенка назвали?
-Маша.
-Хорошее имя, но намучается с ним пацан!

С макросом в варианте из №9 будет аналогично, ибо Selection относится исключительно к активному окну, и совершенно не факт, что выделение совпадет на всех листах. Осмелюсь предположить, что в 99% случаев оно будет различным.


Быть или не быть, вот в чем загвоздка!

 

Ответить

Pelena

Дата: Среда, 16.12.2020, 11:00 |
Сообщение № 12

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Selection относится исключительно к активному окну

Разве sh.Activate для этого недостаточно?


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

RAN

Дата: Среда, 16.12.2020, 13:02 |
Сообщение № 13

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

Избыточно.
Выполни макросы в файле, и погляди результат.

К сообщению приложен файл:

0527016.xlsm
(14.9 Kb)


Быть или не быть, вот в чем загвоздка!

 

Ответить

Pelena

Дата: Среда, 16.12.2020, 15:54 |
Сообщение № 14

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Поглядела.
Там, где есть sh.Activate, отрабатывает, как надо. В остальных случаях работает неверно.
Не пойму, что не так?


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

RAN

Дата: Среда, 16.12.2020, 16:26 |
Сообщение № 15

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

По тому, как сформулирован вопрос, все верно. Но я, почему-то, уверен, что нужно так, как работает третий макрос. ;)
Могу ошибаться, но это не точно.


Быть или не быть, вот в чем загвоздка!

 

Ответить

mgt

Дата: Пятница, 18.12.2020, 12:46 |
Сообщение № 16

Группа: Пользователи

Ранг: Новичок

Сообщений: 45


Репутация:

13

±

Замечаний:
0% ±


Excel 2010

Pelena, почему такая сложность, так как кнопку на каждом листе надо удалять перед тем как распечатать, так как она тоже печатается.

К сообщению приложен файл:

1620669.jpg
(40.5 Kb)

 

Ответить

Serge_007

Дата: Пятница, 18.12.2020, 14:51 |
Сообщение № 17

Группа: Админы

Ранг: Местный житель

Сообщений: 15894


Репутация:

2623

±

Замечаний:
±


Excel 2016

[offtop]

-Как ребенка назвали?
-Маша.
-Хорошее имя, но намучается с ним пацан!


— А ещё, Леонид Аркадьевич, ребенка мы назвали в честь вашей передачи!
— Оооо, интересно, и как же?
— СекторПриз
— Даа-а, не самое лучшее имя для девочки…

:)


ЮMoney:41001419691823 | WMR:126292472390

 

Ответить

Содержание

  1. Как удалить в ячейке формулу, оставив значения?
  2. Как удалить в ячейке формулу, оставив значения?
  3. Как удалить в ячейке формулу, оставив значения?
  4. Vba excel удалить формулу

Как удалить в ячейке формулу, оставив значения?

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

Выделяете ячейку/несколько ячеек с формуламиКопируетеПравая кнопка мышиСпециальная вставкаЗначения

Вот и все. Больше формул нет.
Так же подобное можно сделать при помощи кода VBA:

Sub Formulas_To_Values() Selection.Value = Selection.Value End Sub

Для использования кода переходим в редактор VBA( Alt + F11 ) —InsertModule и вставляем приведенный код. Чтобы выполнить код надо на листе нажать сочетание клавиш 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 ) —InsertModule и вставляем приведенный код. Чтобы выполнить код надо на листе нажать сочетание клавиш 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 ) —InsertModule и вставляем приведенный код. Чтобы выполнить код надо на листе нажать сочетание клавиш 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
Serge_007 Дата: Суббота, 07.05.2011, 01:36 | Сообщение № 2
Гость Дата: Суббота, 07.05.2011, 01:42 | Сообщение № 3
Serge_007 Дата: Суббота, 07.05.2011, 01:46 | Сообщение № 4

ЗЫ Если-бы была такая прога, то она работала-бы по такому-же принципу.

ЗЫ Если-бы была такая прога, то она работала-бы по такому-же принципу. Serge_007

ЗЫ Если-бы была такая прога, то она работала-бы по такому-же принципу. Автор — Serge_007
Дата добавления — 07.05.2011 в 01:46

Gloom Дата: Понедельник, 14.05.2012, 12:10 | Сообщение № 5

Возможно пригодится макрос:

Макрос заменяет все формулы на значения во всех файлах на всех листах в указанной папке

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

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

Возможно пригодится макрос:

Макрос заменяет все формулы на значения во всех файлах на всех листах в указанной папке

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

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

Сообщение Возможно пригодится макрос:

Макрос заменяет все формулы на значения во всех файлах на всех листах в указанной папке

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

Источник

Adblock
detector

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.

Like this post? Please share to your friends:
  • Удалить весь текст в ячейке оставив цифры excel
  • Удаление форматов ячеек excel
  • Удалить в word имя удаленного файла
  • Удаление форматирования текста в word
  • Удалить в word все слова в строке