Здравствуйте. Помогите , пожалуйста , с макросом для сортировки. Необходимо сортировать сначала по столбцу "В" (дата) , а потом по столбцу "F" (№) по возрастанию - как в примере . Строк на листе около 2000. Заранее спасибо.
Здравствуйте. Помогите , пожалуйста , с макросом для сортировки. Необходимо сортировать сначала по столбцу "В" (дата) , а потом по столбцу "F" (№) по возрастанию - как в примере . Строк на листе около 2000. Заранее спасибо.Amator
В примере столбец F по убыванию Если таки по возрастанию, то так можно [vba]
Код
Sub tt() Application.ScreenUpdating = 0 Application.Calculation = 3 r0_ = 4 n_ = Cells(Rows.Count, 7).End(3).Row - r0_ + 1 On Error Resume Next With Cells(r0_, 2).Resize(n_) .SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C" .Value = .Value End With With Cells(r0_, 6).Resize(n_) .SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C" .Value = .Value End With On Error GoTo 0 With ActiveSheet.Sort .SortFields.Clear .SortFields.Add Key:=Cells(r0_, 2).Resize(n_), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers .SortFields.Add Key:=Cells(r0_, 6).Resize(n_), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal .SortFields.Add Key:=Cells(r0_, 7).Resize(n_), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal .SetRange Cells(r0_, 1).Resize(n_, 20) .Apply End With ar = Cells(r0_, 1).Resize(n_, 6) For i = 1 To n_ If ar(i, 1) = "" Then ar(i, 2) = "" ar(i, 6) = "" End If Next i Cells(r0_, 1).Resize(n_, 6) = ar Application.Calculation = 1 Application.ScreenUpdating = 1 End Sub
[/vba]
В примере столбец F по убыванию Если таки по возрастанию, то так можно [vba]
Код
Sub tt() Application.ScreenUpdating = 0 Application.Calculation = 3 r0_ = 4 n_ = Cells(Rows.Count, 7).End(3).Row - r0_ + 1 On Error Resume Next With Cells(r0_, 2).Resize(n_) .SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C" .Value = .Value End With With Cells(r0_, 6).Resize(n_) .SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C" .Value = .Value End With On Error GoTo 0 With ActiveSheet.Sort .SortFields.Clear .SortFields.Add Key:=Cells(r0_, 2).Resize(n_), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers .SortFields.Add Key:=Cells(r0_, 6).Resize(n_), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal .SortFields.Add Key:=Cells(r0_, 7).Resize(n_), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal .SetRange Cells(r0_, 1).Resize(n_, 20) .Apply End With ar = Cells(r0_, 1).Resize(n_, 6) For i = 1 To n_ If ar(i, 1) = "" Then ar(i, 2) = "" ar(i, 6) = "" End If Next i Cells(r0_, 1).Resize(n_, 6) = ar Application.Calculation = 1 Application.ScreenUpdating = 1 End Sub