Обратите внимание, что это не всегда находит последнюю использованную строку , но если в строках 1 и 2 нет данных, она найдет самую последнюю строку 1048576
Ori_row_count = sh.Range("A1", sh.Range("A1").End(xlDown)).Rows.Count
New_row_count = sh1.Range("A1", sh1.Range("A1").End(xlDown)).Rows.Count
поэтому ваши циклы будут повторяться 1048576
раз, и из-за 2 циклов это будет выполняться 2 раза.
Используйте это, чтобы найти последнюю использованную строку:
Dim LastUsedRow As Long
LastUsedRow = sh.Cells(sh.Rows.Count, "A").End(xlUp).Row
Похоже, вы используете l oop только для того, чтобы найти первую пустую ячейку sh.Cells.Item(BB, 6) = Empty
в столбце F. Я думаю, вы могли бы сделать это, просто заменив l oop
For BB = 2 To Ori_row_count + 1
If sh.Cells.Item(BB, 6) = Empty Then
Ori_row_count_Up = BB
Exit For
End If
Next BB
просто
Dim NextEpmtyRowF As Long
NextEpmtyRowF = sh.Cells(2, "F").End(xlDown).Row + 1
If sh.Cells(2, "F").Value = vbNullString Then
NextEpmtyRowF = 2
ElseIf sh.Cells(3, "F").Value = vbNullString Or NextEpmtyRowF >= sh.Rows.Count Then
NextEpmtyRowF = 3
End If
Если вы хотите, чтобы следующая строка epmty после всех данных в столбце F, вы могли бы даже использовать следующее вместо l oop:
Dim NextEpmtyRowF As Long
NextEpmtyRowF = sh.Cells(sh.Rows.Count, "F").End(xlUp).Row + 1