Страницы: 1
RSS
Сократить слишком длинный VBA код (копирование ячеек с другого листа по условию)
 
Я написал код, но он оказался слишком большой. Можно ли как-то сократить код или убрать ограничение?
 
Код
    Dim cell As Range
    Dim lNum As Long

    With Worksheets("Training")
        For Each cell In Range("E5:AV25")
            lNum = Right$(cell.Value, 3)
            If lNum >= 2 And lNum <= 999 Then .Range("E" & lNum).Copy cell
        Next cell
    End With

Это чтобы сократить простыню из 998 строк (сколько же времени убито на прописывание номеров? :) )
Если в проверяемом диапазоне ячейки заполнены нужными  значеними, проверка If lNum >= 2 And lNum <= 999 Then не нужна. Хотя,  для гарантированного обхода возможной ошибки, желательно оставить.
А надо ли копировать все (.Copy cell)? Если нужны только значения,  запоолнять не каждую ячейку по отдельности - значения занести в массив и разово выгрузить их на лист. Так намного быстрее.
 
Цитата
vikttur написал:
Это чтобы сократить простыню из 998 строк (сколько же времени убито на прописывание номеров?  )
2 минуты. Думаю, чтобы было понятнее, скину рабочую версию, а не черновик.
Пользователь прописывает пользовательские настройки на листах "Список" и "Список2.2", выполняется макрос "Red", который успешно работает, а затем выполняется макрос "NewInf" и заполняется "Лист4"

Цитата
Run-time error '13':
Type mismatch
 
Ну, понятно же - в ячейке пусто, в переменную типа Long такое не записать.
Проверяйте:
Код
            If Left$(cell.Value, 1) = "B" Then
                lNum = Right$(cell.Value, 3)
                If lNum >= 2 And lNum <= 999 Then .Range("E" & lNum).Copy cell
            End If
 
vikttur,Ваш код подошел. Это просто у меня была ошибка, которая не сочеталась с предложенным вами вариантом. Я убрал ошибку и всё заработало. Благодарю
Изменено: Ranker Dark - 20.03.2021 16:38:00
Страницы: 1
Наверх