Ускоряем работу VBA в Excel. Добавление новых кнопок на панель быстрого доступа

22.05.2019

В разделе на вопрос Как ускорить процесс открытия файлов Word и Excel? Только прочитайте весь вопрос. заданный автором Простоватый лучший ответ это Побольше операьтивної памяті,помощнее проуцесор, і меньше файлов запущених в опер пмяті,ворд внести в ісключенія в антивірус, щоб лишній раз не проверял.

Ответ от Арсен Сандоянц [гуру]
1. Попробуйте снять все красивости операционной системы
2. Поставьте запуск Word и Excel в планировщик Windows
4. Настройте сами программы: уберите лишние панели инструментов, отключите ненужные графические элементы
5. Попробуйте разбить файлы на составные части (как бы по главам)
У меня так работали эти программы на маломощном компьютере. Сейчас у меня i5 процессор, 4 Гб оперативной памяти и никакая программа не виснет


Ответ от Малосольный [гуру]
Заходим сюда: C:Program FilesMicrosoft OfficeOffice12
и по файлам пр. кн. мыши "EXCEL.EXE" и "WINWORD.EXE" - Отправить ---> Рабочий сто (создать ярлык) .
На рабочем столе по ярлыку EXCEL (расширение убираем) -ПКМ - Свойства - и в поле "Объект" в конце пути прописывем это: " /prefetch:1".
И путь к файлу будет такой:
"C:Program FilesMicrosoft OfficeOffice12EXCEL.EXE" /prefetch:1
(обратить внимание, что между
"EXCEL.EXE" и знаком слэш 1 пробел /prefetch)
---
И так же делаем для Word.
(других способов оптимизации скорости разворачивания файлов вроде нет, а может и есть 🙂)
========


Вмещается 32 767 знаков. Поэтому функция быстрого изменения ширины столбца по его содержимому не всегда удобна. :) Хотя в большинстве случаев она выручает. Наведите курсор мыши на правую границу заголовка столбца и дважды кликните по ней, чтобы программа подобрала оптимальную ширину столбца. Этот трюк работает и для нескольких столбцов, а также для всего листа.

2. Как быстро выделить всю строку или столбец

При работе с большими объёмами данных невозможно обойтись без клавиатурных сокращений, с помощью которых легко перемещаться по листу и выделять отдельные столбцы или строки. Комбинации Ctrl + Spacebar и Shift + Spacebar как раз и отвечают за быстрое выделение текущего столбца или строки.

Однажды я наблюдал, как четырёхлетний использовал горячие клавиши копирования и вставки для ввода ключа к игре. Похоже, неразлучная троица Ctrl + C , Ctrl + V и Ctrl + A впитывается молодым поколением вместе с молоком матери. К слову, команда «Выделить всё» в Excel имеет небольшую особенность: одиночное нажатие Ctrl + A выделяет текущий диапазон, а двойное - таблицу целиком.

4. Как внести изменения на нескольких листах одновременно

Пареная репа, твой выход! К примеру, чтобы поменять размер шрифта сразу на всех листах, необходимо собрать их в группу с помощью щелчков мышью по закладкам листов, удерживая клавишу Ctrl.

5. Как перенести строку в текущей ячейке

Хочешь поиздеваться над новичком в - попроси его вписать данные внутри ячейки в несколько строк. Конечно, школьный трюк, но со старшим поколением работает на ура. Комбинация Alt + Enter предотвращает переход к другой ячейке и переводит курсор на новую строку в пределах текущей ячейки.

Вставка дополнительной строки или столбца отнимает три-четыре щелчка мышью. Это немного, но только до той поры, пока вам не понадобится сразу десяток новых столбцов, например. Однако, предварительно выделив необходимое количество уже существующих ячеек, можно отделаться всё тем же числом кликов.

7. Как быстро вставить текущую дату

Судя по всему, горячие клавиши Ctrl + ; и Ctrl + Shift + ; нужно крутить по радио вместо утреннего гимна. Эти комбинации стоит повторять до той поры, пока на планете не останется того трудяги, который вбивает дату и время вручную.

  • Tutorial

Предисловие

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

Перед началом работы

Перед тем, как перейти прямо к сути, я хотел бы обратить внимание на пост: Несколько советов по работе с VBA в Excel . В частности, в блоке “Ускорение работы макросов” есть полезные примеры кода, которые стоит использовать вместе с моими советами по ускорению работы, для достижения максимального результата.

Ускоряем работу макроса

Итак, к сути… Для того что бы реально ускорить работу VBA в Ecxel нужно понимать, что обращение к ячейке на листе - занимает значительно время. Если Вы хотите записать в ячейку одно значение, то это не займет значительного времени, но если Вам потребуется записать(прочитать, обратиться) к тысячам ячеек, то это потребует гораздо большего времени. Что же делать в таких случаях? На помощь приходят массивы. Массивы хранятся в памяти, а операции в памяти VBA выполняет в сотни, а то и в тысячи раз быстрее. Поэтому, если у Вас в данных тысячи, сотни тысяч значений, то время выполнения макроса может занимать от нескольких минут до нескольких часов, а если эти данные перенести в массив, то выполнение макроса может сократиться до нескольких секунд (минут).

Я наведу пример кода и в комментариях объясню что к чему, так будет яснее. К тому же, могут пригодиться некоторые строки кода, не относящееся прямо к процессу ускорения.

Пример
Предположим, что у нас есть данные на “Лист1” (“Sheet1”). Данные содержаться в 50 колонках (колонки содержат названия) и 10 000 строк. К примеру, нам нужно в последнюю колонку внести значение, которое равно значению во второй колонке, деленное на значение в третьей колонке (начиная со 2-й строки, так как первая содержит заглавие). Потом мы возьмем первые 10 колонок и скопируем их на “Лист2” (“Sheet2”), для дальнейшей обработки (для других потребностей). Пусть пример и банальный, но, как мне кажется, он может отобразить всю суть данного поста.

"Для явной инициализации переменных, включаем эту опцию "Это поможет избежать многих ошибок Option Explicit Sub Test() "К листам будем обращаться через переменные Dim Sheet1_WS, Sheet2_WS As Worksheet "Переменная для прохождения срок на листе (в массиве) Dim i As Long "Массив, в котором будут храниться наши данные Dim R_data As Variant "Переменные последней строки и колонки Dim FinalRow, FinalColumn As Long "Можно инициализировать лист не по названию, а по порядковому номеру "Set Sheet1_WS = Application.ThisWorkbook.Worksheet("Sheet1") Set Sheet1_WS = Application.ThisWorkbook.Sheets(1) Set Sheet2_WS = Application.ThisWorkbook.Sheets(2) "Поиск последней не пустой строки в первой колонке "Нужно, что бы данные не были отфильтрованы, иначе последняя строка будет последней строкой в фильтре "Также в последней строке, в первой колонке, не должно быть пустой ячейки. Конечно, если в этой строке вообще есть данные. Иначе последней строкой будет последняя не пустая ячейка. FinalRow = Sheet1_WS.Cells(Rows.Count, 1).End(xlUp).Row "=10 000 "Поиск последней не пустой колонки в первой строке FinalColumn = Sheet1_WS.Cells(1, Columns.Count).End(xlToLeft).Column "=50 "Присваиваем массиву диапазон данных на Листе 1 R_data = Sheet1_WS.Range(Sheet1_WS.Cells(1, 1), Sheet1_WS.Cells(FinalRow, FinalColumn)) For i = 2 To FinalRow "Выполняем нужные нам операции с данными. "Проверяем, что бы не было деления на ноль. "Предполагается, что в колонке 2 и 3 стоят числовые данные "Иначе потребуется обработка ошибок If R_data(i, 3) <> 0 Then R_data(i, FinalColumn) = R_data(i, 2) / R_data(i, 3) End If Next i "Копируем данные из массива обратно на Лист1 "Перед этим очищаем данные на листе (если есть форматирование или формулы, то лучше Sheet1_WS.Cells.ClearContents) Sheet1_WS.Cells.Delete Sheet1_WS.Range(Sheet1_WS.Cells(1, 1), Sheet1_WS.Cells(FinalRow, FinalColumn)) = R_data "Копируем данные на Лист2, копируем первые 10 колонок. Sheet2_WS.Range(Sheet2_WS.Cells(1, 1), Sheet2_WS.Cells(FinalRow, 10)) = R_data "Закрываем книгу и сохраняем её Workbooks(Application.ThisWorkbook.Name).Close SaveChanges:=True End Sub

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

Dim R_new() As Variant ............................................ " Явно указываем размер массива ReDim R_new(1 To FinalRow, 1 To 50) As Variant ........................................... Sheet1_WS.Range(Sheet1_WS.Cells(1, 1), Sheet1_WS.Cells(FinalRow, 50)) = R_new()

Заключение

Большинство операций над данными можно выполнять в массиве, при этом, отображать на лист только результат. Иногда целесообразным бывает показать результат на лист, потом выполнить некоторые действия (например, сортировку) и снова загрузить данные в массив.

Для меня было большой неожиданностью ускорения работы макроса за счет массивов, так как данные на листах, на самом деле, итак представляют собой двумерный массив. Но, оказывается, обращение к памяти происходит гораздо быстрей, чем к ячейкам на листе.

В дальнейшем я планирую написать советы (примеры) по быстрому поиску данных на листе, но это уже будет другой пост. Если будут вопросы, комментарии, пожалуйста, пишите.

Спасибо за внимание. Удачных разработок.

Вам прислали файл Excel большого размера? Он сильно тормозит и долго сохраняется? После каждого действия необходимо ждать. При этом, в файле не так много информации. Почему тормозит Excel, причины и следствия, а главное как с этим бороться? Сейчас разберемся.

Тормоза программ пакета MS Office дело распространенное. Excel тормозит из-за целого ряда причин: неправильное использование функций программы (лишнее условное форматирование, сводные таблицы основанные на огромных массивах, лишние строки в документах). Excel тоже не идеален и тормоза происходят из-за не совершенства программной части (появляющиеся объекты, папка printerSettings в структуре). Поэтому рекомендуем вам пройтись по всем 10 шагам ниже и не останавливаться на одном.

Иногда диапазон отформатирован в виде специальной таблицы (Верхняя панель — вкладка Вставка — Таблица), это может привести к тому, что сильно тормозит Excel файл, особенно если таблицы большие.

Чтобы определить такой формат, выделите любую ячейку таблицы. Появляется панель «Работа с таблицами» в верхнем меню, самая правая. Выберите всю таблицу затем вкладку Работа с Таблицами, Конструктор — Раздел сервис — Преобразовать в диапазон.

2. Убрать излишнее условное форматирование (если Excel тормозит при прокрутке)

Что такое условное форматирование, читайте . Очень полезная штука, если правильно применять, если нет, то это заставит Ваш файл работать медленно.

Дело в том, что при копирование ячеек, копируется и форматирование — если в файл постоянно копируются новая информация, то в ней сохраняются условия формата, в особенности условного форматирования.

Убираем так. Выбираете лист. Выберите нужный диапазон или весь лист. В верхней панели Главная — Условное форматирование — Удалить правила — Удалить правила из выделенных ячеек/с листа. Жмем.

3. Удалить лишние строки/столбцы (если ползунок прокрутки очень маленький)

Самая частая проблема для excel с которой я встречаюсь. Если кто-то случайно переместился на конец листа (на строку номер 1 млн) и так сохранил книгу. Размер файла сразу увеличился. Дойти до конца таблицы можно и случайно — если нажать сочетание Ctrl + стрелка вниз или вправо. Бывает, что в конце книги находится какой-нибудь случайный символ или заливка.

Главный признак тормозов — это размер ползунка, он очень маленький, когда файл сохранен неверно, как на картинке.

Исправьте ситуацию, удалите лишние строки или столбцы. Найдите последнюю полезную ячейку для вас, выделите первую пустую ячейку после нее (а лучше первую пустую строку/столбец после нее), нажмите . Такое сочетание клавиш выделяет ячейки ниже выбранной строки или правее выбранного столбца. Правая кнопка мыши – Удалить – Удалить строку или столбец (как правило, проходит долго). После удаления выберите ячейку А1 и сохраните файл. Ползунок должен увеличиться.

4. Удалить лишние объекты

Очень часто, особенно при копировании из других файлов или сайтов в таблицах прячутся скрытые объекты — рисунки, фигуры и т.п.

Чтобы удалить такие объекты , нажмите Alt + F11 и копируйте текст ниже.

Sub DelOb() For Each i In ActiveSheet.Shapes i.Delete Next end sub

Или выделите и удалите объекты вручную. Перейдите в меню Главная — Редактирование — Найти и выделить — пункт Выделение группы ячеек — Объекты. Теперь удаляйте.

5. Удалить лишние данные в структуре файла Excel

Даже опытные пользователи не знают, что файл Excel, как говорит Википедия , это файл-архив. Начиная с 2007 выпуска.

Т.е. файл Excel открывается, к примеру, архиваторами 7-zip или WinRar. Внутри открытого файла могут храниться ненужные файлы, что тормозит Excel порой в десятки раз.

Удалим неудобство? Сперва сделайте резервную копию файла:) Затем запустите 7-zip или другой архиватор, меню «Файл» — «Открыть внутри». Возможно открыть файл кликнув правой кнопкой мыши — Открыть с помощью и выбрав.exe файл WinRar или 7-zip.

Откроется архив, он же файл Excel c папками и файлам.

Находим папки «drawings» и/или «printerSettings» (скорее всего они будут в папке xl) и удаляем их.

Для WinRar делаем тоже самое.

После чего открываем книгу как файл Excel, он немного поругается, выведет несколько системных сообщений, что не находит данных и т.п. На все окна нажимаем ОК, файл восстановится.

Будьте внимательны, если в вашем файле есть нарисованные кнопки или другие фигуры, то удалять всю папку drawings — значит и удалять полезные фигуры.

Поэтому, в папке, удалите только файлы vmlDrawing.vml, они могут накапливать информацию и весить до 100 мб.

6. Тормозит Excel — правильно настройте сводные таблицы

Если сводная таблица ссылается на большой диапазон ячеек от 10 тыс. строк, она хранит результаты расчетов, которые могут быть очень большими. От этого вся книга excel тормозит, конечно же. Чтобы устранить эту причину, нажмите на сводную таблицу правой кнопкой мыши — Параметры сводной таблицы — вкладка Данные — уберите галочку Сохранять исходные данные вместе с файлом.

Что позволит уменьшить файл почти в два раза.

7. Измените формат файла на.xlsb

Если вы работаете с огромными таблицами и ваши файлы больше 0,5 мб весом, то лучше сохранять такие книги в формате . Двоичный формат книги Excel, т.е. специальный формат для создания «базы данных» на основе электронных таблиц. Если сохранить большой файл в таком формате, вес книги уменьшится в два-три раза. Расчеты в файл тоже будут проходить быстрее, в некоторых случаях в 2 раза быстрее.

8. Установлен неопознанный принтер

Если у Вас на компьютере не определен принтер, т.е. не стоит принтер по умолчанию, то зайдите в устройства и принтеры и измените принтер по умолчанию на любой другой (даже если физически принтера нет), если принтер есть, лучше сменить дрова.

Бывает что даже при удалении настроек принтера из пункта 5 настройки принтера тормозят файл.

9. Удалите файл PERSONAL

Зайдите в …Application Data\Microsoft\Excel\XLSTART или …Microsoft Office\Office12 найдите в этих папках файл под название PERSONAL и удалите его. Подробнее читайте .

10. Замените много созданных формул макросами

Часто матрица 10 000 строк на 10 столбцов со сложными формулами ссылающимися на другие листы, хуже книги, жутко тормозит файл. Попробуйте формульные расчеты заменить на записанные , переводящий формулы в скопированные как значения числа или текст. Это поможет, если с файлом с производится много действий — а значит файл часто пересчитывается. Сам недавно попробовал — помогло. Пишите в комментариях, если нужна помощь.

11. Уменьшите размер рисунков

Самый простой способ для версии 2007 и выше — выбрать рисунок, на верхней панели появиться вкладка Работа с рисунками — Формат.

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

12. Перейдите на поздний Excel — 2013 или 2016

Разработчики нашего любимого редактора действительно не останавливаются в развитии продукта. Проведя ряд экспериментов, я выявил, что большинство сложных операций таких как расчет ячеек, выполнение макроса, сохранение и другие в версии 2016 выполняются быстрее ~на 15% от 2007.

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

Так что еще один хороший способ ускорить работу в Excel — перейти на MS Office 2013 и выше.

Теперь попробуйте сами.

Если эти 12 шагов не помогли, то лучше перенесите или скопируйте всю информацию в новый файл. Возможно поврежден сам файл.

Логичное продолжение статьи — оптимизация ресурсов компьютера под использование Excel — читайте в .

Если ничего не помогает пишите комментарии, постараемся помочь.

Поделитесь нашей статьей в ваших соцсетях:

Периодически обращаются ко мне с вопросами "почему тормозит офис". В данный момент разбираюсь с медленным запуском программы Excel из пакета Office 2007. Проблема довольно распространенная. Может быть много разнообразных причин и, соответственно разные способы решения. Чтобы не держать все это в голове, собираю все найденные способы в этой статье.

Способ первый

Привожу перевод статьи на английском языке , попавшуюся в интернете, в процессе поисков решения проблемы:

Проблема

Если Excel еще не запущен, двойной клик по файлу запускает его мгновенно, но файл, по которому кликнули, может загрузиться лишь через минуту.

Решение

В Windows XP данная проблема может быть решена следующим образом:

  1. Запустите Проводник (Explorer)
  2. Выберите меню Сервис (Tools)
  3. Меню Свойства папки (Folder Options)
  4. Вкладка Типы файлов (File Types)
  5. Найдите элемент XLS
  6. Кнопка Дополнительно (Advanced)
  7. Элемент списка Открыть (Open)
  8. Кнопка Изменить... (Edit...)

В появившемся диалоговом окне вы должны внести два изменения:

Приложение, исполняющее действие: (Application to perform action:)

В конце строки, после ключа /e, добавьте пробел и "%1" (вместе с кавычками)

Незапущенное приложение DDE: (DDE Application Not Running:)

Вставьте текст: (вместе со скобками)

Подробности

Мы обнаружили проблему после обновления до MS Office 2007. Отец заметил, что таблица Excel загружается быстро, если включить путь к EXCEL.EXE в командную строку. Загрузка документа через DDE, как делает Проводник, похоже, занимает намного больше времени, по крайней мере, если приложение еще не запущено. Изменения, описанные выше, передают путь к файлу сразу же, когда приложение запущено. Команда DDE, запускаемая позже, является всего лишь комментарием и, как пустая строка, в результате выполняет действие по умолчанию из поля двумя строками выше. Ключ /e , похоже, предотвращает открытие пустой таблицы, поэтому я сначала исключил его, поскольку, если передан файл, обычно пустая таблица и так не открывается. Однако, я получил сообщение от человека (тут была ссылка на страницу форума майкрософт, которая теперь не существует. - примечание переводчика ), использующего ключ /e , и поскольку мне он тоже не мешает, я предлагаю оставить его на месте. Если Excel уже запущен, следующий документ будет открыт через DDE, как и раньше. В результате только один процесс Excel будет работать.

Word

Снова и снова меня спрашивают, знаю ли я подобный трюк для Word. Даже без всяких трюков Word запускается достаточно быстро, но при этом добавление "%1" дало мне небольшое увеличение скорости запуска. Я не знаю точно, что такое "". Это похоже на некий "специальный комментарий", который оказывает какой-то эффект, не смотря на то, что является комментарием. Я решил скопировать этот комментарий в окошко "Незапущенное приложение DDE " и не заметил нежелательных эффектов. Я также оставил ключи /e и /dde в командной строке, просто потому что не обнаружил никакого вреда от них.

Возврат к прежнему состоянию

Если вы попробовали эти рекомендации, но они вам не помогли, возвращение настроек к прежнему виду может оказаться более сложным чем вы ожидаете. Похоже, окно, в котором вы вносите изменения, всегда добавляет %1 к команде, когда вы нажимаете ОК. Единственное решение, которое мне удалось найти, это использовать редактор реестра. Команда хранится в дефолтном ключе в ветке: HKEY_CLASSES_ROOT\Excel.Sheet.8\shell\Open\command

Если вы также хотите вернуть настройку DDE, зайдите в соседнюю ветку ddeexec и удалите ветку IfExec целиком.

Другие способы

Недоступен сетевой ресурс

  • Проверьте, нет ли в системе сетевых принтеров, которые в данный момент недоступны. Офисные приложения при запуске могут пытаться их обнаружить и подолгу ждать отклика.
  • В реестре в ветке HKEY_CLASSES_ROOT\Applications найдите программы, которые в параметрах имеют путь типа \\another_comp\folder\app.exe . Если этот сетевой ресурс недоступен, сделайте доступным, или удалите этот параметр. (Сначала попробуйте добавить к этой программе пустой строковой параметр NoOpenWith .)

Большой размер файла

Удалите невидимые объекты:

  1. Сделайте резервную копию файла
  2. Откройте его
  3. Нажмите Ctrl+G
  4. Кнопка Выделить...
  5. Переключите на объекты
  6. Нажмите ОК
  7. Если табличка Не найдено ни одного объекта - переходите на следующий лист, и пробуйте еще
  8. Если завис, не нервничайте, ждите
  9. После того как объекты выделены, удаляйте их клавишей Delete на клавиатуре
  10. Повторите это действие на всех листах книги
  11. Сохраните документ и попробуйте как теперь открывается

Формат файла

Если файл в формате xls (формат офиса 2003), попробуйте пересохранить в новом формате. Меню Файл (Логотип офиса) -> Сохранить как -> Книга Excel (*.xlsx) . После этого файл станет немного меньше и будет быстрее открываться офисом 2007 и 2010.

Надстройки сторонних производителей

  1. Меню Файл (Логотип офиса в левом верхнем углу)
  2. Кнопка Параметры Excel
  3. В левой части окна выберите Надстройки
  4. В нижней части из ниспадающего списка выберите Надстройки COM
  5. Нажмите Перейти...
  6. Если в открывшемся окне есть надстройки, попробуйте отключать их по очереди и проверяйте изменения в скорости запуска