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

Достижения

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

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

Все теги (81)

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

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

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

    Option Explicit ' Обязательное объявление переменных
    Option Base 1 ' Нижняя граница массива (по умолчанию)
    '12345678901234567890123456789012345bopoh13@ya67890123456789012345678toster56789
    
    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 комментариев
  • Какую книгу выбрать для быстрого изучения английского (1 месяц)?

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

    bopoh13
    @bopoh13
    VBA, Ruby (noob), analytic
    Ответ написан
    Комментировать
  • Стоит ли серьезно изучать VBA?

    bopoh13
    @bopoh13
    VBA, Ruby (noob), analytic
    1) Да, особенно Excel. Думаю не стоит рассказывать о том, что Excel удобнее своих аналогов.
    2) Нет, вероятно это слухи. Можно даже сказать, что языки несовместимы.
    3) Нет. Для того чтобы работать во фрилансе, нужно уметь писать на тех языках, на которых предполагается выполнения задания. Как правило VBA там нет.

    В целом с помощью VBA можно решать другие задачи, например для AutoCAD. Можно подключать сторонние библиотеки и работать с их функциями. Да и в любой области, где производительность не играет особой роли, а важен результат. Неплохо его знать для того, чтобы придя за чужой компьютер, можно было не разворачивать среду программирования, а воспользоваться ей из установленного пакета MS Office (который есть на любом ПК под Windows).

    VBA можно понять самому (достаточно почитать справку в и-нете). Что мешает после VBA освоить другой инструмент (выучить ещё один язык)?

    Ах, да! Если действительно вас интересует перспективный язык - смотрите в сторону разработки мобильных приложений (каждая вторая компания их выпускает).
    Ответ написан
    Комментировать
  • Как установить windows 7 так что бы сразу был доступен Администратор без создания дополонительных пользователей?

    bopoh13
    @bopoh13
    VBA, Ruby (noob), analytic
    Проще установить как есть, затем через "управление" включить администратора и удалить пользователя.
    Ответ написан
    3 комментария

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

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