Основные принципы сохранения быстродействия макросов VBA:
  1. Если пользуетесь макрорекодером, то всегда проверяйте за ним написанный код.
  2. В начале каждого модуля объявите "Option Explicit", чтобы переменные не терялись.
  3. Для сопоставления адресов ячеек и элементов массивов объявите "Option Base 1".
  4. Всегда загружайте данные из ячеек в массив (лучше не циклом, а присвоением диапазона ячеек); обработку данных выполняйте в массиве (скорость выполнения по сравнению с перебором ячеек то 5 до 68 раз быстрее).
  5. Объявляйте переменные массивов с круглыми скобками; для присвоения динамическому массиву списка значений - задайте тип "Variant" (скорость обработки данных внутри переменной массива по сравнению с обычной переменной в 18 раз быстрее).
  6. Откажитесь от метода "Select" (скорость обращения напрямую к объектам в 6 раз быстрее).
  7. Перед выгрузкой значений из массива в ячейки отключайте группировку (ячейки должны быть видимы).
Контакты

Достижения

Все достижения (5)

Наибольший вклад в теги

Все теги (81)

Лучшие ответы пользователя

Все ответы (216)
  • Как разделить .xlsx по строкам?

    honor8
    @honor8
    Принципы быстродействия VBA в описании
    Если файл сохранён на диске, можно так:
    1. Открываете книгу с данными на нужном листе
    2. Заходите в VBA (Alt+F11)
    3. Выбираете в меню Insert -> Module
    4. Вставляете нижеприведённый код
    5. Нажимаете F5 (не сохраняете исходный файл)

    Option Explicit ' Обязательное объявление переменных
    Option Base 1 ' Нижняя граница массива (по умолчанию)
    '123456789012345678901234567890123456h8nor@ya567890123456789012345678toster56789
    
    Sub Border_Limit()
      Dim Limit As Integer, Count As Integer, SaveDir As String, SetTitle As Boolean
      
      Count = 1: Limit = 1000 ' Счётчик файлов; Количество строк
      SetTitle = False ' Если есть заголовок, заменить False на True
      
      SaveDir = ThisWorkbook.Path ' Или вписать полный путь для сохранения "C:\"
      ' Предполагается, что в колонке A нет пустых ячеек
      While Not IsEmpty(Cells(IIf(SetTitle, 2, 1), 1))
        Rows("1:" & Limit).Copy
        Workbooks.Add xlWBATWorksheet ' Создать новую книгу: шаблон с 1 листом
        ActiveSheet.Paste: Cells(1, 1).Select
        ActiveWorkbook.SaveAs Filename:=SaveDir & "\Массив_" & Count & ".xlsx", _
          FileFormat:=xlOpenXMLWorkbook
        ActiveWindow.Close
        Rows(IIf(SetTitle, 2, 1) & ":" & Limit).Delete Shift:=xlUp
        Count = Count + 1
      Wend: MsgBox "Файл разбит на " & Count - 1 & " файл(ов). "
    End Sub

    Никакие C++ запускать не надо.

    Для пытливых умов: Отказ от Слияния в пользу шаблонов https://toster.ru/q/320942
    Ответ написан
    5 комментариев
  • Как изменить разделители для CSV в Excel?

    honor8
    @honor8
    Принципы быстродействия VBA в описании
    • Изменяется региональными настройками системы: Дополнительные параметры (кнопка) -> Числа (вкладка) -> Разделитель элементов списка. Блинк
    • Написать макрос для сохранения данных с разделителем запятой:
      Sub SaveAComma()
        ActiveWorkbook.SaveAs Filename:="C:\Users\User\Desktop\ActiveSheet.csv", _
          FileFormat:=xlCSV, CreateBackup:=False, Local:=False
      End Sub
    • Чтобы открыть файл c разделителем "запятая" - в первой строке CSV-файла написать sep=,
    Ответ написан
    4 комментария
  • Почему adblock не блокирует рекламу в Yandex'е?

    honor8
    @honor8
    Принципы быстродействия VBA в описании
    Убрал рекламу. Обошёл динамические атрибуты.
    ! Реклама в поиске (старая)
    yandex.ru## li[class*="serp-adv-item"]
    ! Рекламная ссылка-заголовок, описание с телефонами
    yandex.ru## li.serp-item > div[class^="organic"] > h2:not([class$="title"]),h2:not([class$="title"]) ~ div
    ! Прочие ссылки кроме адресов, форумов, картинок, карт, маркета
    yandex.ru## li[class^="serp-item "]:not([class$="adresa"]):not([class$="forum"]):not([class*="image-stats"]):not([class*="z-maps"]):not([class*="z-market"])

    Но это всё равно полумеры. Завтра опять может что-нибудь изменится. Создал на GitHub лист с подписками.
    Без поддержки псевдо-атрибутов нужно писать userscript ((
    ЗЫ: на Я-Главной - изменить cookies через настройки.
    Ответ написан
    2 комментария
  • Как в vs code можно посмотреть отличия в строках кода файлов?

    honor8
    @honor8
    Принципы быстродействия VBA в описании
    Еcли открыт репозиторий в vscode, или во вкладке "Открытые редакторы". Вкладка приложения "Проводник":
    1. ПКМ на 1-м файле, пункт "Выбрать для сравнения" (Select for Compare)
    2. ПКМ на 2-м файле, пункт "Сравнить с выбранным" (Compare with Selected)

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

    Расширение для сравнения директорий в бонус (в комментариях).
    Ответ написан
    Комментировать
  • Какую книгу выбрать для быстрого изучения английского (1 месяц)?

    honor8
    @honor8
    Принципы быстродействия VBA в описании
    Считаются эффективными ассоциативные методики (не книга).
    Прежде чем оценивать, просмотрите первый урок.
    ЗЫ: Раз, Два, Три месяца не хватит на освоение 2-го языка. Четыре.
    Ответ написан
    1 комментарий

Лучшие вопросы пользователя

Все вопросы (6)