Макрос сохранения листа Excel в файл
Данный макрос позволяет упростить процедуру сохранения активного листа в книге Excel в отдельный файл.
Для использования этого макроса на любом листе в книге Excel создайте кнопку, и назначьте ей макрос СохранитьЛистВФайл.
При запуске макроса (нажатии кнопки) будет выведено диалоговое окно выбора имени для сохраняемого файла, после чего текущий лист будет сохранён под заданным именем в выбранной папке.
Сохранение производится в формате XLS (формат Excel 2003)
Если пользователь отказался от ввода имени файла (нажал клавишу ESC или кнопку «Отмена» в диалоговом окне),
то сохранения листа в файл не происходит.
PS: Кто-то может сказать, что для сохранения листа в файл в объектной модели Excel есть метод SaveAs, применимый к объекту Worksheet.
Но, как ни странно, выполнение кода ActiveSheet.SaveAs "<имя файла>" приводит к сохранению книги целиком, что равносильно использованию кода ActiveWorkbook.SaveAs "<имя файла>"
Почему этот метод сохранения работает так нелогично — лично мне не понятно (видимо, Microsoft что-то там перемудрил)
- 172633 просмотра
Комментарии
тогда макрос будет выглядеть так:
Спасибо за ответ. все дело было в неверном указании количества листов. А переменная ПутьКПапке выбирается пользователем ранее. Правда теперь у меня встал следующий вопрос. Крайне не хочется позволять пользователю менять какие либо значения в исходном файле, для чего собственно и копируется часть листов в отдельный файл. А так как у меня параноя прокачена в 10 я поставил всем листам книги свойство very hidden. Есть ли возможность как-нибудь изменить код, что бы можно было производить операцию копирования листов с этим свойством?
Тимон, в моём коде проверяется, чтобы в копии файла был один лист:
исправьте 1 на 8, — и всё заработает
и ещё, — вы где-то потеряли строку, которая записывает в переменную ПутьКПапке собственно этот самый путь
в итоге, получится так:
Написал код по образцу:
Sub СохранитьЛистыВФайл()
Filename = «отчёт.xls»
‘ копируем активный лист (при этом создаётся новая книга)
Err.Clear: Worksheets(Array(«Техн.тепло», «Вода», «Стоки», «отопление», «Эл .энергия», «Вода хоз.быт.», «Хозбытовые стоки», «воздух»)).Copy: DoEvents
If Err Then Exit Sub ‘ произошла какая-то ошибка при попытке копирования листа
‘ убеждаемся, что активной книгой является копия листа
If ActiveWorkbook.Worksheets.Count = 1 And ActiveWorkbook.Path = «» Then
‘ сохраняем файл под заданным именем в формате Excel 2003
ActiveWorkbook.SaveAs ПутьКПапке & Filename, xlWorkbookNormal
‘ закрываем сохранённый файл
‘ (удалите следующую строку, если закрывать созданный файл не требуется)
ActiveWorkbook.Close False
End If
End Sub
только он работает не так как нужно. копирует выбранные листы в файл, который называет «Книга1» открывает ее и дальше не сохраняет и не закрывает. подскажите пожалуйста, что мои кривые руки опять собрали в неверном порядке?
Владимир, мой макрос только сохраняет лист в файл.
Ширину столбцов макрос ну никак не может поменять.
Вам надо искать причину в чем-то другом, — возможно, есть где-то в файле другие макросы.
У меня оффис 2010. При сохранении нарушается ширина столбцов. Как исправить.
А имя файла в ячейке хранится вместе с расширением?
если нет, — то программно дописывайте расширение к тексту из ячейки, и проблема исчезнет
У меня имя файла по умолчанию(при открытии диалогового окна) берется из ячейки. Если в ячейки написано слово с точками например: «PHP.FGR.001» то в окне выбора файла не отображается заданное имя файла. А если без точек то все хорошо. Почему так происходит?
Чтобы не удалять все имена и связи с листа, — просто надо не копировать лист целиком,
а создать новый файл с одним листом, и на него вставить массив данных с листа «Store»
(скопировать только значения)
По сохранению файла на рабочем столе:
Доброго дня, нужна помощь, что и на что нужно изменить чтобы выбранный лист сохранялся на рабочий стол вне зависимости от точного адреса этого самого рабочего стола, на подобии команды .specialfolders(«desktop») и как правильно её написать?
И второе, как убрать все BreakLink не прописывая их все вручную?
Прошу не ругать за мою корявую работу, а помочь с решением проблемы, только начинаю осваивать Excel в самостоятельном порядке.
Зарание спасибо
Здравствуйте, Андрей
Попробуйте так:
Добрый день!
Подскажите, пожалуйста, на Вашем примере, если мне нужно сохранить активный лист из книги в ту же папку, где и сама книга, но название ему присвоить по названию самой книги и добавить к нему название из определенной ячейки (например А1)(для Excel 2010)?
Что-то вроде
Filename$ = ThisWorkbook.Path & «\» & «здесь_имя_книги» & «_» & «А1» «.xlsx»
Всё гениальное просто. Спасибо за помощь. И отдельное спасибо за оперативность.
Здравствуйте, Константин
Всё просто:
Здравствуйте.
Нужно, чтобы имя файла задавалось автоматически по шаблону год-месяц-число-часы-минуты.xlsx
Пошёл по следующему пути: создал на листе ячейку, форматированную как Дата, и Вашим макросом, взятым из комментариев, присваиваю сохраняемому файлу имя, взятое из этой ячейки. Способ не самый удачный по причине того, что данные в этой ячейке нужно каждый раз обновлять, что не всегда случается (человеческий фактор). Можно ли реализовать задумку иным способом?
Вы мне в своё время помогли в макросом СОХРАНИТЬ КАК с переходом в нужную папку и заданием шаблона будущего файла.
Sub Сохранить_как_док()
‘ название подпапки, в которую по-умолчанию будет предложено сохранить файл
Const REPORTS_FOLDER = «E:\Rassil 2004\Документальные ведомости\»
Dim sFilename
‘ выбираем стартовую папку
ChDrive Left(REPORTS_FOLDER, 1): ChDir REPORTS_FOLDER
‘ вывод диалогового окна для запроса имени сохраняемого файла
sFilename = Application.GetSaveAsFilename(«_2013.xls», «Отчёты Excel (*.xls*),», , _
«Введите имя файла для сохраняемого отчёта», «Сохранить»)
‘ если пользователь отказался от выбора имени файла — отменяем сохранение листа в файл
If VarType(sFilename) = vbBoolean Then Exit Sub
ActiveWorkbook.SaveAs sFilename, xlNormal
End Sub
Спасибо ещё раз большое, но возникла небольшая трудность.
Если исходный файл предварительно не сохранить принудительно, то при применения макроса СОХРАНИТЬ КАК да, создаётся сохранённый новый файл, а оригинал не сохраняется и теряет данные. Да, иелось ввиду, что не сам файл не сохраняется, а не сохраняются именно последние внесённые данные, которые не были сохранены вручную
Прошу подсказать, что необходимо добавить в макрос, что бы при СОХРАНИТЬ КАК и создавался новый файл и сохранялся оригинал?
И возможно ли дополнительно сделать, что бы оригинал при этом не закрывалчя?
Здравствуйте! Помогите пожалуйста.
У меня в Excelе есть анкета,хочу создать кнопку «сохранить» внизу анкеты, и чтобы оно сохраняло только изменения именно в этой анкете. И если ответили не на все вопросы, вышла надпись «Вы не ответили на все вопросы».
Это возможно?
Заранее всем спасибо!
А вы разместите кнопку на другом листе,
или же вообще без кнопки, — назначьте макросу комбинацию «горячих клавиш», — и проблема будет решена.
Спасибо, скачал «Макрос сохранения листа Excel в файл»
А как избавиться от кнопки макроса в копиях? Макросов там нет. а кнопки торчат.
Единственно у меня заработал код после добавления строки вверху:
Dim Filename As Variant
Поясните с чем это связано?
Уже разобрался. Все работает. Спасибо. Вопрос немного не по теме — нужен макрос, который бы при распечатки листа из одной книги заносил некоторые данные в другую книгу, закрытую. Смысл — есть 4 рабочих станции, с которых распечатывают заявления клиентов, нужно составлять реестр распечатанных заявлений на общем сетевом диске. Подскажите, есть ли что-то подобное уже в готовом виде или хотя бы примерно похожее, я бы допилил самостоятельно. Спасибо!
Здравствуйте, Максим.
После создания новой книги путем копирования листа (ActiveSheet.Copy), новая (созданная) книга ВСЕГДА становится активной.
Если вы ничего не меняли в коде, и в ваших файлах нет никаких макросов, которые могут влиять на активацию книг, — то все должно работать.
При работе макроса выясняю, что он сохраняет лист в отдельную книгу, но при открытии новой книги активное окно остается та, книга, из которой копируется лист, соответственно, условие If ActiveWorkbook.Worksheets.Count = 1 не выполняется. Что я делаю не так?
Для этого нужен уже другой макрос, более сложный
Могу сделать под заказ.
Как сохранить в файл только выбранный диапазон, с шапкой, выбранный сортировкой по столбцу.
Здравствуйте! Подскажите пожалуйста команду или сам макрос: я копирую значение ячеек из одной книги в другую, но в другой книге мне нужно к этому значению еще добавлять одну и ту же запись. вобщем как при копировании макросом к скопированному при вставке еще приписывалось бы определенная запись. пример: в первой книге столбик с данными. ставлю курсор на нужную мне запись которую надо скопировать в другую книгу. допустим А1 запись — TP010-0068287. а мне нужно что бы она скопировалась в другую открытую книгу но на конце бы приписывалось -16-01-20. то есть в итоге в другой книге в ячейке А1 была бы запись TP010-0068287-16-01-20. спасибо!
Ой! я только сейчас заметил что услуга платная
напишете на почту стоимость данного вопроса
Анатолий, раз, по вашим словам, в скриптах вы совсем ничего не понимаете, вариантов-то получается немного:
1) обратиться за помощью на форумы по Excel (прикрепив там пример файла)
2) продолжать разбираться самостоятельно
3) оформить заказ у меня на сайте (я сам разберусь, что к чему, и вы получите готовое решение)
я в скриптах мало что понимаю (точней совсем не понимаю) все делаю методом тыка
изменил верх и низ макроса по вашим рекомендациям
теперь происходит вот что
При запуске макроса (нажатии кнопки) выведено диалоговое окно выбора имени для сохраняемого файла, после чего 2 не активных листа будет сохранён под заданным именем в выбранной папки (без формул)
после нажатия сохранить
происходят дальнейшие действия
автоматически еще раз сохраняет файл (имя файла берет из активного листа ячейки «В2″(все правильно) в папку на рабочем столе (новую папку не создает если значение ячейки «С2» активного листа изменилось)
Здравствуйте, Анатолий.
Так попробуйте:
методом тыка у меня получилось вот что
On Error Resume Next
Folder$ = «C:\Documents and Settings\Admin\Рабочий стол\» & Worksheets(1).Range(«C12») & «\»
MkDir Folder$ ‘ создаем папку, если её ещё нет
‘ формируем имя файла из текста ячеек
Filename = [B2] & «.xls»
Dim Ar(), ArAll&(), Sh As Excel.Worksheet, n
Ar = Array(3, 4) ‘порядковые номера сохраняемых листов с формулами
ReDim Preserve ArAll(0 To ThisWorkbook.Worksheets.Count — 1)
For Each Sh In ThisWorkbook.Worksheets
ArAll(n) = Sh.Index
n = n + 1
Next
ThisWorkbook.Worksheets(ArAll).Copy
ActiveWorkbook.Sheets(Ar(0)).Activate
Application.Volatile
Application.Calculate
Application.ScreenUpdating = False
For Each n In Ar
With ActiveWorkbook.Worksheets(n).UsedRange.Cells
.Value = .Value
End With
Next
Erase ArAll: n = 0
ReDim Preserve ArAll(0 To ThisWorkbook.Worksheets.Count — 1 — (UBound(Ar) + 1))
For Each Sh In ActiveWorkbook.Worksheets
If IsError(Application.Match(Sh.Index, Ar, 0)) Then
ArAll(n) = Sh.Index
n = n + 1
End If
Next
ActiveWorkbook.SaveAs Filename, xlWorkbookNormal
‘закрыть книгу после сохранения
ActiveWorkbook.Close True
On Error Resume Next
Kill tempfile
End Sub
теперь имя файла сохраняется значению ячейки активного листа, а папку не получается сделать так чтобы имя вставало из активного листа С2
в этом скрипте много лишнего из за этого немного подвисает но когда больше ничего нет приходится работать тем что есть
доброго времени суток.
подскажите что нужно убрать, и что нужно дописать или заменить, чтобы имя папки (сохранялось) = значение ячейки (С2) активного листа там где кнопка , а имя файла(сохранялось) = значение ячейки (В2) активного листа там где кнопка
если такой файл существует то перезаписать
On Error Resume Next
‘ название подпапки, в которую по-умолчанию будет предложено сохранить файл
Const REPORTS_FOLDER = «Отчёты\»
‘ создаём папку для файла, если её ещё нет
MkDir ThisWorkbook.Path & «\» & REPORTS_FOLDER
‘ выбираем стартовую папку
ChDrive Left(ThisWorkbook.Path, 1): ChDir ThisWorkbook.Path & «\» & REPORTS_FOLDER
Dim Ar(), ArAll&(), Sh As Excel.Worksheet, n
Ar = Array(3, 4) ‘порядковые номера сохраняемых листов с формулами
ReDim Preserve ArAll(0 To ThisWorkbook.Worksheets.Count — 1)
For Each Sh In ThisWorkbook.Worksheets
ArAll(n) = Sh.Index
n = n + 1
Next
ThisWorkbook.Worksheets(ArAll).Copy
ActiveWorkbook.Sheets(Ar(0)).Activate
Application.Volatile
Application.Calculate
Application.ScreenUpdating = False
For Each n In Ar
With ActiveWorkbook.Worksheets(n).UsedRange.Cells
.Value = .Value
End With
Next
Erase ArAll: n = 0
ReDim Preserve ArAll(0 To ThisWorkbook.Worksheets.Count — 1 — (UBound(Ar) + 1))
For Each Sh In ActiveWorkbook.Worksheets
If IsError(Application.Match(Sh.Index, Ar, 0)) Then
ArAll(n) = Sh.Index
n = n + 1
End If
Next
Application.DisplayAlerts = False
ActiveWorkbook.Worksheets(ArAll).Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Application.Dialogs(xlDialogSaveAs).Show
‘закрыть книгу после сохранения
ActiveWorkbook.Close True
On Error Resume Next
Kill tempfile
End Sub
1.) для офиса 2007 (без сохранения макросов )формат xlsx, для 2003?, как сохранять ни весь лист а определенную область?
2.) как с помощью макроса открыть word и скопировать туда данные с excel?
А какое отношение ваш вопрос имеет к теме статьи?
1. используйте ActiveWorkbook.SaveAs Filename, xlOpenXMLWorkbook
Это сохранит книгу в формате XLSX — без поддержки макросов (соответственно, они все автоматически удалятся после закрытия файла)
Предварительно замените все формулы значениями, в цикле пройдясь по листам,
2. Скопируйте весь лист Excel, вставьте в Word, и в контекстном меню вставки выберите опцию «вставить как изображение»
Здравствуйте подскажите два макроса:
1. как сохранить всю книгу (или лист) без макросов и формул ?
2. как сохранить файл из excel в word(что бы в ворде отоброжалось как картинка)?
Спасибо, уже сам справился.
Добрый день! Помогите, пожалуйста, сохранить файл с именем из ячейки C2 в новую папку с именем, взятым из E3 . Заранее благодарен!
Александр, не поленитесь, — прочитайте все комментарии к статье.
В них вы найдёте ответы на свои вопросы.
Доброго времени суток! Как сохранить не активный лист, а несколько листов сразу (например 4) в одну книгу с задание имени файла по определенной ячейке?
Заранее спасибо!
Все нашел сам 🙂
вместо saveas надо использовать ExportAsFixedFormat
про имя из ячеек нашел сам. а как сохранять в pdf пока не разобрался. помогите плиз.
а может этот макрос сохранить в формате PDF с именем заданным из ячеек ?
Спасибо за замечание, исправил.
Спасибо за код.Все работает ка надо.
При сохранении файла не добавляется расширение к файлу из за банальной опечатки 🙂 :
«Filename = Application.GetSaveAsFilename(«отчёт.xls», «Отчёты Excel (*.xls*). )»
Поправьте на : «(*.xls)», просто лишний знак «*»
Прошу прощения, спасибо за помощь. Последний вопрос,скажите, отфильтрованную часть сохранить насколько сложно?
Мало того, я думал сохранит Excel только с данными, которые задал фильтрами
Прочитайте внимательно название статьи: «Сохранение ЛИСТА в файл»
Вот лист целиком и сохраняется.
Насчёт того, как включить запись макросов, — в интернете про это много написано,
в том числе и видеоинструкции есть (разобраться несложно)
Если разбираться некогда (или лень) — можете оформить заказ, я сам все сделаю (не бесплатно)
И навожу и отправляю. Он сохраняет как заданное имя и все. если только не прописывать имя.xlsx Мало того, я думал сохранит Excel только с данными, которые задал фильтрами, а он весь файл сохранил. Про удаление не знаю где включить запись( и как.
Сохраняет без расширения? Не верю.
Отправьте созданный файл сами себе по почте, или щелкните правой кнопкой на нём, и посмотрите свойства.
И расширение файла чудесным образом появится из ниоткуда)
По удалению столбцов — включите запись макросов, выполните необходимые действия, — получите нужный код.
Потом вставьте полученный код в макрос из статьи, перед строкой
галочку снял чтобы показывало расширение и при сохранении внизу показывает xlsx, но сохраняет все равно как файл без раширения. Удалить лишние столбцы вы имеете ввиду вручную? если нет, можно примерчик? очень благодарен вам за ответы.
Хранение значений после окончания макроса
Когда макрос заканчивается, значения, хранимые в его переменных, автоматически не сохраняются на диске. Если макрос должен сохранить значение, он должен хранить это значение за пределами себя до завершения выполнения макроса. В этом разделе описаны пять местоположений, в которых можно легко хранить и извлекать значения макроса.
Переменные документа
Переменные документов позволяют хранить значения в составе документа или шаблона. Например, можно хранить значения макроса в документе или шаблоне, где находится макрос. Вы можете добавить переменные в документ или шаблон с помощью метода Добавить коллекции Переменные . В следующем примере сохраняется переменная документа в том же расположении, что и запущенный макрос (документ или шаблон) с помощью свойства ActiveDocument .
В следующем примере свойство Value с объектом Variable возвращает значение переменной документа.
Примечания
Используйте поле DOCVARIABLE, чтобы вставить переменную документа в документ.
Свойства документов
Как и переменные документов, свойства документа позволяют хранить значения как часть документа или шаблона. Свойства документа можно просмотреть в диалоговом окне Свойства .
Объектная модель Word разбивает свойства документа на две группы: встроенную и настраиваемую. Свойства настраиваемого документа включают свойства, показанные на вкладке Custom в диалоговом окне Свойства . Встроенные свойства документов включают свойства всех вкладок в диалоговом окне Свойства , за исключением вкладки Custom .
Чтобы получить доступ к встроенным свойствам, используйте свойство BuiltInDocumentProperties для возврата коллекции DocumentProperties , которая включает встроенные свойства документов. Используйте свойство CustomDocumentProperties объекта Document или объекта Template , чтобы вернуть коллекцию DocumentProperties , которая включает настраиваемые свойства документа. В следующем примере создается настраиваемая свойство документа с именем "YourName" в том же расположении, что и запущенный макрос (документ или шаблон).
Встроенные свойства документов не могут быть добавлены в коллекцию DocumentProperties , возвращаемую свойством BuiltInDocumentProperties объекта Document или Объекта Template . Однако можно получить содержимое встроенного свойства документа или изменить значение свойства документа чтения и записи.
Используйте поле DOCPROPERTY для вставки свойств документа в документ.
Элементы автотекста
Записи AutoText можно использовать для хранения сведений в шаблоне. В отличие от переменной документа или свойства, записи AutoText могут включать элементы за пределы макро-переменных, таких как форматированный текст или графический. Используйте метод Добавить в коллекцию AutoTextEntries для создания новой записи AutoText. В следующем примере создается запись AutoText с именем "MyText", которая содержит содержимое выбора. Если следующая инструкция является частью макроса шаблона, новая запись AutoText хранится в шаблоне, в противном случае запись AutoText хранится в шаблоне, присоединенном к документу, в котором находится инструкция.
Используйте свойство Value с объектом AutoTextEntry для получения содержимого объекта входа AutoText.
Параметры файлы
Вы можете установить и получить сведения из файла параметров с помощью свойства PrivateProfileString объекта System . Структура файла параметров Windows то же самое, что и Windows 3.1 WIN.INI файла. В следующем примере ключ DocNum устанавливается в разделе DocTracker в Macro.ini файле.
После запуска вышеуказанной инструкции файл Macro.ini содержит следующий текст.
Свойство PrivateProfileString имеет три аргумента: FileName, Section и Key. Аргумент FileName используется для указания пути файла параметров и имени файла. Аргумент Раздела указывает имя раздела, которое отображается между скобками перед связанными ключами (не включайте скобки с именем раздела). Аргумент Key указывает имя ключа, за которым следует равный знак (=) и параметр.
Используйте то же свойство PrivateProfileString для получения параметра из файла параметров. В следующем примере извлекаем параметр DocNum в разделе DocTracker в Macro.ini файле.
Windows реестра
Вы можете установить и получить сведения из реестра Windows с помощью свойства PrivateProfileString. В следующем примере извлекает каталог программ Word 2007 из Windows реестра.
Свойство PrivateProfileString имеет три аргумента: FileName, Section и Key. Чтобы вернуть или задать значение для записи реестра, укажите пустую строку ("") для аргумента FileName . Аргумент Раздела должен быть полным путем к подкайке реестра. Ключевым аргументом должно быть имя записи в подкайке, указанной в разделе.
Вы также можете установить сведения в реестре Windows с помощью следующего синтаксиса PrivateProfileString.
Значение System.PrivateProfileString (FileName, Section, Key_)_ =
В следующем примере в подкайке Параметры для Office Word 2007 в реестре Windows doc-PATH устанавливается запись "C:\My Documents".
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office 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, где уже есть готовые макросы для конвертации формул в значения и делать все одним касанием мыши: