Пару дней поизучал примеры, составил что то годное, но долгое. Задумка следующая: Шаг1: Если в столбце H есть пустая ячейка то всю строку переносим на Лист2 Шаг2: Если в столбце J есть пустая ячейка то всю строку переносим на Лист3 Шаг3: А дальше идет наведение красоты (название столбцов и переименование листа), как смог так и сделал, главное работает
Третий шаг, проходит быстро, а вот первые два достаточно долго. Если строк будет в районе 5 тысяч, то задача будет длится минут пять, смысл этой задумки теряется.
Dim iLastRow As Long, jLastRow As Long, i As Long iLastRow = Cells(Rows.Count, 1).End(xlUp).Row With Sheets("Лист2") jLastRow = .Cells(Rows.Count, 1).End(xlUp).Row Range(.Cells(2, 1), .Cells(jLastRow + 1, 11)).Clear jLastRow = 1 For i = 2 To iLastRow If Cells(i, 8) = "" Then
Union(Range(Cells(i, 1), Cells(i, 2)), Range(Cells(i, 5), Cells(i, 6))).Copy .Cells(jLastRow + 1, 1) jLastRow = jLastRow + 1 End If
Next
End With
With Sheets("Лист3") jLastRow = .Cells(Rows.Count, 1).End(xlUp).Row Range(.Cells(2, 1), .Cells(jLastRow + 1, 11)).Clear jLastRow = 1 For i = 2 To iLastRow If Cells(i, 10) = "" Then
Union(Range(Cells(i, 1), Cells(i, 2)), Range(Cells(i, 5), Cells(i, 6))).Copy .Cells(jLastRow + 1, 1) jLastRow = jLastRow + 1 End If Next
End With Range("A1,B1,E1,F1,H1").Select Range("H1").Activate Selection.Copy Sheets("Лист2").Select Range("A1").Select ActiveSheet.Paste Sheets("Лист1").Select Range("A1,B1,E1,F1").Select Range("F1").Activate Application.CutCopyMode = False Selection.Copy Sheets("Лист3").Select Range("A1").Select ActiveSheet.Paste Range("B16").Select Sheets("Лист2").Select Sheets("Лист2").Name = "Для прайса" Sheets("Лист3").Select Sheets("Лист3").Name = "Для поставщика" End Sub
[/vba]
Как ускорить можно?
Пару дней поизучал примеры, составил что то годное, но долгое. Задумка следующая: Шаг1: Если в столбце H есть пустая ячейка то всю строку переносим на Лист2 Шаг2: Если в столбце J есть пустая ячейка то всю строку переносим на Лист3 Шаг3: А дальше идет наведение красоты (название столбцов и переименование листа), как смог так и сделал, главное работает
Третий шаг, проходит быстро, а вот первые два достаточно долго. Если строк будет в районе 5 тысяч, то задача будет длится минут пять, смысл этой задумки теряется.
Dim iLastRow As Long, jLastRow As Long, i As Long iLastRow = Cells(Rows.Count, 1).End(xlUp).Row With Sheets("Лист2") jLastRow = .Cells(Rows.Count, 1).End(xlUp).Row Range(.Cells(2, 1), .Cells(jLastRow + 1, 11)).Clear jLastRow = 1 For i = 2 To iLastRow If Cells(i, 8) = "" Then
Union(Range(Cells(i, 1), Cells(i, 2)), Range(Cells(i, 5), Cells(i, 6))).Copy .Cells(jLastRow + 1, 1) jLastRow = jLastRow + 1 End If
Next
End With
With Sheets("Лист3") jLastRow = .Cells(Rows.Count, 1).End(xlUp).Row Range(.Cells(2, 1), .Cells(jLastRow + 1, 11)).Clear jLastRow = 1 For i = 2 To iLastRow If Cells(i, 10) = "" Then
Union(Range(Cells(i, 1), Cells(i, 2)), Range(Cells(i, 5), Cells(i, 6))).Copy .Cells(jLastRow + 1, 1) jLastRow = jLastRow + 1 End If Next
End With Range("A1,B1,E1,F1,H1").Select Range("H1").Activate Selection.Copy Sheets("Лист2").Select Range("A1").Select ActiveSheet.Paste Sheets("Лист1").Select Range("A1,B1,E1,F1").Select Range("F1").Activate Application.CutCopyMode = False Selection.Copy Sheets("Лист3").Select Range("A1").Select ActiveSheet.Paste Range("B16").Select Sheets("Лист2").Select Sheets("Лист2").Name = "Для прайса" Sheets("Лист3").Select Sheets("Лист3").Name = "Для поставщика" End Sub