Страницы: 1
RSS
Копирование диапазона по условию
 
Здравствуйте. Подскажите решение следующей задачи. Имеется несколько диапазонов с данными. Под диапазонами указано количество непустых ячеек в каждом среднем столбце диапазона. Необходимо по условию, если это количество равно 6, скопировать каждый из таких диапазонов и вставить в другое место таблицы, как показано
на скриншоте:
 
Код
Private Sub CommandButton1_Click()
For i = 3 To 16 Step 4
If Cells(17, i) = 6 Then

End If
Next i
End Sub
Изменено: Обамка - 09.12.2018 12:33:09
 
Код
Private Sub CommandButton1_Click()
Dim i As Long, FreeColumn As Long
    FreeColumn = 2
    For i = 3 To 15 Step 4
        If Cells(17, i) = 6 Then
            Range(Cells(2, i - 1), Cells(16, i + 1)).Copy Cells(19, FreeColumn)
            FreeColumn = FreeColumn + 4
        End If
    Next
End Sub
 
Спасибо. Только вот если много таких вот диапазонов, то процесс выполнения макроса очень медленный.
Может через массивы как-то. Только сам я не соображаю, уж извините.  
Изменено: Обамка - 09.12.2018 16:00:40
 
Цитата
Обамка написал:
процесс выполнения макроса очень медленный
У Вас там наверное формул на листе много?  
 
Очень медленно - это сколько? И для какого количества столбцов?
Не проверял, но мы же не по одной ячейке копируем, а целые диапазоны.
Попробуйте так: вместо диапазонов массивы. Но форматирование будет потеряно:
Код
Private Sub CommandButton1_Click()
Dim i As Long, FreeColumn As Long, Arr()
    FreeColumn = 2
    For i = 3 To 15 Step 4
        If Cells(17, i) = 6 Then
            Arr = Range(Cells(2, i - 1), Cells(16, i + 1)).Value
            Cells(19, FreeColumn).Resize(15, 3).Value = Arr
            FreeColumn = FreeColumn + 4
        End If
    Next
End Sub
 
Юрий М, я дико извиняюсь, но разницы между #2 и #5 не видно...
 
Не тот код скопировал ))  
 
Цитата
_Igor_61 написал:
У Вас там наверное формул на листе много?  
Нет, формул две всего и то для примера. Пример прикрепляю ниже.  
 
Ну, спасибо за помощь. Диапазонов действительно может быть около 2000, если на лист залезут. Потеря форматирования не очень страшна.  
 
Проверил на втором файле два варианта - оба работают очень быстро.
 
Второй вариант выполняется мгновенно. Но без форматирования. Я думал только заливка ячеек потеряется. Ну ладно, и так сойдет тоже.  
Страницы: 1
Наверх