Попробуйте это: Было бы быстрее, потому что он не зависит от выбора, но на прямой манипуляции данными через VBA
Sub CopyRows()
Dim r_src As Range, r_dst As Range
' Pick 1st row and column of table
Set r_src = Sheets("Sheet1").Range("B4")
Set r_dst = Sheets("Sheet2").Range("B4")
Dim i As Integer, j As Integer
Dim N_rows As Integer, N_cols As Integer
'Find the size of the data
N_rows = CountRows(r_src)
N_cols = CountColumns(r_src)
'Resize source range to entire table
Set r_src = r_src.Resize(N_rows, N_cols)
Dim src_vals() As Variant, dst_vals() As Variant
'Get all the values from source
src_vals = r_src.Value2
ReDim dst_vals(1 To N_rows, 1 To N_cols)
Dim k As Integer
k = 0
For i = 1 To N_rows
' Check first column
If Val(src_vals(i, 1)) >= 10 Then
' Increment count
k = k + 1
' Copy row values
For j = 1 To N_cols
dst_vals(k, j) = src_vals(i, j)
Next j
End If
Next i
' Bring rows back into destination range
If k > 0 Then
r_dst.Resize(k, N_cols).Value2 = dst_vals
End If
End Sub
Public Function CountRows(ByRef r As Range) As Integer
CountRows = r.Worksheet.Range(r, r.End(xlDown)).Rows.Count
End Function
Public Function CountColumns(ByRef r As Range) As Integer
CountColumns = r.Worksheet.Range(r.End(xlToRight), r).Columns.Count
End Function
Вот тест я бегу:
Перед
После
Я бы сказал, что этот метод слишком сложный для задачи, и любые выгоды от скорости будут перевешиваться им. Существуют более чистые способы использования вариантов массивов. – aevanko
Я не думаю, что это является основанием для ниспроверки. Это рабочее решение, оно надежное и мгновенное. Сложность находится в глазу смотрителя здесь. И, пожалуйста, подробно расскажите о «более чистом» способе использования массивов «Вариант». – ja72
Достаточно честный. Я добавлю ответ на основе массивов вариантов позже и объясню больше. – aevanko