Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.08.2020, 11:53   #21
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Цитата:
Сообщение от Mkoty Посмотреть сообщение
не могу понять как обозначить эти переменные:
Dim PosStr1
и
Dim tmp
- можно на паузе кода посмотреть в Locals какой тип им присваивает сам макрос, их и использовать.
Какой код хочется ускорить? Если речь про ZZ - то нужно переходить на массивы, а форматирование можно сделать потом сразу всему диапазону.
Кроме того зачем-то в цикле из ячеек заполняете 5 лишних переменных, это тоже время крадёт.
Ну и про отключение обновления экрана уже говорили - это на примере даёт ускорение более чем в 3 раза.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 01.08.2020 в 12:23.
Hugo121 вне форума Ответить с цитированием
Старый 08.08.2020, 08:39   #22
Mkoty
Пользователь
 
Регистрация: 26.05.2020
Сообщений: 22
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Какой код хочется ускорить? Если речь про ZZ - то нужно переходить на массивы, а форматирование можно сделать потом сразу всему диапазону.
массив победил скорость выросла в разы. СПАСИБО!
Код:
Sub ZZ(ByVal ii As Long)
Dim a  As Variant
Dim b(1 To 340, 1 To 20) As Variant
Dim Ostatok As String
    Ostatok = ActiveWorkbook.Worksheets("Лист4").Range("D1")
    Ostatok = CCur(Ostatok)
    a = Sheets("Лист2").Range("A1:J" & ii)
 
    For i = ii To 1 Step -1
        b(i, 3) = "№ " + a(i, 5)
        b(i, 4) = CVar(a(i, 6))
        b(i, 5) = a(i, 8)
        b(i, 19) = a(i, 3)
        b(i, 20) = a(i, 4)
      
      
        If a(i, 7) = "РР" And a(i, 8) <> " Юрга " Then
            b(i, 1) = "Расходная Розничная"
            If a(i, 9) = "ВЗ" Then
                b(i, 7) = CCur(a(i, 2))
                Ostatok = Ostatok + CCur(a(i, 2))
            Else
                b(i, 9) = CCur(a(i, 2))
                Ostatok = Ostatok - CCur(a(i, 2))
            End If
        ElseIf a(i, 7) = "РН2" Then
            b(i, 1) = "Расходная накладная 0.1"
            b(i, 10) = CCur(a(i, 2))
            Ostatok = Ostatok - CCur(a(i, 2))
        ElseIf a(i, 7) = "РН" Then
            b(i, 1) = "Расходная накладная"
            b(i, 9) = CCur(a(i, 2))
            Ostatok = Ostatok - CCur(a(i, 2))
        ElseIf a(i, 7) = "ПН1" Then
            b(i, 1) = "Приходная накладная 0.1"
            b(i, 8) = CCur(a(i, 2))
            Ostatok = Ostatok + CCur(a(i, 2))
        ElseIf a(i, 7) = "ПН" Then
            b(i, 1) = "Приходная накладная"
            b(i, 7) = CCur(a(i, 2))
            Ostatok = Ostatok + CCur(a(i, 2))
        ElseIf a(i, 7) = "ОР" Then
            b(i, 1) = "Отчет реализатора"
            b(i, 16) = CCur(a(i, 2))
        ElseIf a(i, 7) = "РР" And a(i, 8) = " Юрга " Then
            b(i, 1) = "Расходная Реализации"
            b(i, 11) = CCur(a(i, 2))
            b(i, 15) = CCur(a(i, 2))
        ElseIf a(i, 7) = "ПРУ" Then
            b(i, 1) = "Приходная реализатора"
            b(i, 17) = CCur(a(i, 2))
            b(i, 12) = CCur(a(i, 2))
        Else
        End If
        
        If b(i, 1) <> "Отчет реализатора" Then
            b(i, 13) = Ostatok
        End If
        If b(i, 5) = " ЧЛ " Then
            b(i, 5) = " Частное Лицо"
        End If

     
  Next
  
  Лист1.Range("A12:T" & ii + 11) = b
End Sub
один минус
переносить из одного массива в другой не ОПРЕДЕЛЯЯ размер второго не получается, говорит несовпадение типов. Если прописываю размер то... это только для конкретного примера.
а вот занести в
Код:
Dim b(1 To 340, 1 To 20) As Variant
Значение ii вместо 340 не знаю как поставить подскажите

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
-
Кроме того зачем-то в цикле из ячеек заполняете 5 лишних переменных, это тоже время крадёт.
ткните носом
Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Ну и про отключение обновления экрана уже говорили - это на примере даёт ускорение более чем в 3 раза.
Это я убрал еще раньше

Последний раз редактировалось Mkoty; 08.08.2020 в 08:41.
Mkoty вне форума Ответить с цитированием
Старый 08.08.2020, 11:15   #23
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Добрый день.
Ткнуть носом не получится - лениво снова выискивать какие именно 5, можете сами это сделать в том первом варианте.
Про размер - есть ведь
Код:
Redim b(1 to x, 1 to y)
и никаких Dim в начале не нужно.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 08.08.2020, 11:20   #24
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Хотя вот, закинул код в Notepad++ и пощёлкал - используются только один раз в начале цикла переменные:
Kod
CenaVdoke
CenaOpt
Vozvrat
Manager
Вот зачем присваивать им на каждом шаге цикла значения, но не использовать?
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 10.08.2020, 12:36   #25
Mkoty
Пользователь
 
Регистрация: 26.05.2020
Сообщений: 22
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Хотя вот, закинул код в Notepad++ и пощёлкал - используются только один раз в начале цикла переменные:
Kod
CenaVdoke
CenaOpt
Vozvrat
Manager
Вот зачем присваивать им на каждом шаге цикла значения, но не использовать?
их уже давно нет, при использовании массива
Mkoty вне форума Ответить с цитированием
Старый 10.08.2020, 16:26   #26
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Просили ткнуть - ткнул. Что не так?
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 11.08.2020, 05:21   #27
Mkoty
Пользователь
 
Регистрация: 26.05.2020
Сообщений: 22
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Просили ткнуть - ткнул. Что не так?
все так
спасибо
Mkoty вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка таблицы макросом Dorina Microsoft Office Excel 9 22.04.2011 19:24
Обработка символьных массивов. Вывод кодовой таблицы. Manya-srt Помощь студентам 0 08.11.2010 17:05
обработка таблицы в Microsoft Office Excel 2007 leoleonid Microsoft Office Excel 2 08.09.2010 19:02
Обработка таблицы Anatoly_K Microsoft Office Excel 12 03.06.2010 19:12