Здравствуйте. Подскажите решение следующей задачи. Имеется несколько диапазонов с данными. Под диапазонами указано количество непустых ячеек в каждом среднем столбце диапазона. Необходимо по условию, если это количество равно 6, скопировать каждый из таких диапазонов и вставить в другое место таблицы, как показано на скриншоте:
Код
Private Sub CommandButton1_Click()
For i = 3 To 16 Step 4
If Cells(17, i) = 6 Then
End If
Next i
End Sub
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
Спасибо. Только вот если много таких вот диапазонов, то процесс выполнения макроса очень медленный. Может через массивы как-то. Только сам я не соображаю, уж извините.
Очень медленно - это сколько? И для какого количества столбцов? Не проверял, но мы же не по одной ячейке копируем, а целые диапазоны. Попробуйте так: вместо диапазонов массивы. Но форматирование будет потеряно:
Код
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