Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Макрос копирования значений - медленно работает, Нужна оптимизация
 
Большое спасибо всем! Наше обсуждение меня натолкнуло на мысль расширить массив arr2 (записать туда необходимое кол-во строк) и еще добавил отключение обновления экрана, что оказалось еще быстрее.
Можно как-то прописать arr2("в зависимости от кол-ва значений в ws2(A:A)", 1 to 40)?
И можно ли разложить таблицу arr = ws1.Range("AD7:AH14").Value  в строку и записать в ws2.cells(i, 2).resize(1, 40)?
Посоветуйте, пожалуйста, учебник для начинающих по VBA. Их множество, выбрать сложно, так чтобы еще доступным языком написано было.
Макрос копирования значений - медленно работает, Нужна оптимизация
 
МатросНаЗебре, я пытаюсь разобраться как внедрить код #12. Финальный код который получился #14, но у меня не введена переменная arr2 и я не понимаю как это сделать. Не могу разобраться с этой строкой arr2(1, (j - 1) * 5 + j1) = arr(j, j1)
Макрос копирования значений - медленно работает, Нужна оптимизация
 
БМВ,  подскажите, пожалуйста, преобразовал код по Вашей методе, но просто заменить не получается. Полагаю нужно ввести переменную arr2, но никак не пойму как. По примеру arr (Dim arr2 as Variant), далее по примеру присваивается диапазон, но  "arr2(1, (j - 1) * 5 + j1)" это ячейка, дальше у меня затык.

Код
Sub Тест1()

    Dim j As Integer
    Dim arr As Variant

    Dim ws1 As Worksheet
    Set ws1 = Worksheets("Свод сценариев")

    Dim ws2 As Worksheet
        Set ws2 = Worksheets("ТЕСТ1")

    Dim i As Integer
        i = 4
        
        
    Do While Cells(i, 1) <> Empty
        ws2.Cells(1, 1) = ws2.Cells(i, 1) 'Добавил

        arr = ws1.Range(ws1.Cells(7, 30), ws1.Cells(14, 34)).Value
        ws2.Cells(i, 1).Value = ws2.Cells(i, 1).Value 'Предполагаю это теперь лишнее
    
        For j = 1 To 8
            For j1 = 1 To 5
             arr2(1, (j - 1) * 5 + j1) = arr(j, j1)
            Next j1
        Next j
        ws1.Cells(i, t + 1).Resize(, 40) = arr2
    

        i = i + 1
    Loop

End Sub
Изменено: Yarek86 - 27.03.2025 16:56:15
Формула для распределения сотрудников по категориям на основе процентов исполнения, Формула для распределения сотрудников по категориям на основе процентов исполнения
 
Павел \Ʌ/, Я там уже был ;)  За замечание спасибо, сразу не смекнул
Формула для распределения сотрудников по категориям на основе процентов исполнения, Формула для распределения сотрудников по категориям на основе процентов исполнения
 
Павел \Ʌ/, при использовании формулы в #2 для пустых значений в столбце "для Кат" присваивается высшая категория
Формула для распределения сотрудников по категориям на основе процентов исполнения, Формула для распределения сотрудников по категориям на основе процентов исполнения
 
Павел \Ʌ/, нужен. Может так
Код
=ЕСЛИОШИБКА(ВПР(ПРОЦЕНТРАНГ(ЕСЛИ(C$3:C$56>0;C$3:C$56;"");C3);{0;"Д":0,1;"Г":0,2;"В":0,8;"Б":0,9;"А"};2);"")
Макрос копирования значений - медленно работает, Нужна оптимизация
 
БМВ, i это значения на основании которого рассчитывается модель по заданным сценариям. Макрос подставляет эти значения и собирает сводный файл с результатами по сценариям.
Формула для распределения сотрудников по категориям на основе процентов исполнения, Формула для распределения сотрудников по категориям на основе процентов исполнения
 
Павел \Ʌ/, решение классное, но мне кажется по условию задачи "ЕСЛИ" применять вообще не стоит, т.к. рейтинг в определении категории не участвует, а сотрудникам без рейтинга присваивается низшая категория и коэф. 0,5
Формула для распределения сотрудников по категориям на основе процентов исполнения, Формула для распределения сотрудников по категориям на основе процентов исполнения
 
Павел \Ʌ/, для чего функция ЕСЛИ при указании массива в ПРОЦЕНТРАНГ? при такой формуле присваивается категория А и высший коэф. сотрудникам с "0" показателем
Макрос копирования значений - медленно работает, Нужна оптимизация
 
MikeVol, Спасибо! Работает, стало еще быстрее :)

Внес небольшое исправление, код выглядит так:
Код
Sub Тест1()

    Dim j As Integer
    Dim arr As Variant

    Dim ws1 As Worksheet
    Set ws1 = Worksheets("Свод сценариев")

    Dim ws2 As Worksheet
        Set ws2 = Worksheets("ТЕСТ1")

    Dim i As Integer
        i = 4
        
        
    Do While Cells(i, 1) <> Empty
        ws2.Cells(1, 1) = ws2.Cells(i, 1) 'Добавил
        arr = ws1.Range("AD7:AH14").Value
        ws2.Cells(i, 1).Value = ws2.Cells(i, 1).Value
    
        For j = 1 To 8
            ws2.Cells(i, 2 + (j - 1) * 5).Resize(1, 5).Value = Application.Index(arr, j, 0)
        Next j
    

        i = i + 1
    Loop

End Sub

А как записать

Код
arr = ws1.Range("AD7:AH14").Value

В виде

Код
arr = ws1.Range(cells(7, 30), Cells(14, 34)).Value
Выдает ошибку.
Макрос копирования значений - медленно работает, Нужна оптимизация
 
MikeVol, попробую, но Ваш код мне не особо понятен, я новичок
Макрос копирования значений - медленно работает, Нужна оптимизация
 
Большое спасибо! Сработало.

Не совсем понятно как в массив собрать. Необходимо ввести 2 переменных А и В.
Dim A As integer
Dim B As integer

A = диапазон (откуда)
В = диапазон (куда)

А = В
Макрос копирования значений - медленно работает, Нужна оптимизация
 
Код
Worksheets("Свод результатов 2 (доп) (2)").Cells(i, t + 1).Resize(,5) = Worksheets("Свод сценариев").Cells(7, 31).Resize(,5)
Копирует пустые значения, убрал resize во второй части получилось дублирование значения на диапазон. если наоборот убрать из первой, то выдает ошибку. Не пойму что сделать со второй частью чтобы заработало.
Макрос копирования значений - медленно работает, Нужна оптимизация
 
Добрый день.
Макрос очень долго выполняется, подскажите может можно как-нибудь его оптимизировать.

Скрытый текст
Страницы: 1
Наверх