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

Достижения

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

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

Все теги (80)

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

Все ответы (212)
  • Как разделить .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 комментария
  • Какую книгу выбрать для быстрого изучения английского (1 месяц)?

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

    honor8
    @honor8
    Принципы быстродействия VBA в описании
    Ответ написан
    Комментировать
  • Стоит ли серьезно изучать VBA?

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

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

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

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

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

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