Home » excel » excel – Looping macro to work on all columns individually without writing long list of repeated transitions

excel – Looping macro to work on all columns individually without writing long list of repeated transitions

Posted by: admin April 23, 2020 Leave a comment

Questions:

I am trying to loop this macro (below) to go through all me data columns but need some help creating a loop or adjusting the current code to work for all columns.

Sub Trial_5()

'
    ActiveCell.Offset(0, -7).Columns("A:A").EntireColumn.Select
    ActiveWorkbook.Worksheets("Sheet6").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Sheet6").Sort.SortFields.Add Key:=ActiveCell, _
        SortOn:=xlSortOnValues, Order:=xlDescending,    DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Sheet6").Sort
        .SetRange ActiveCell.Range("A1:A16395")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        `enter code here`.SortMethod = xlPinYin
       .Apply
    End With
End Sub

do I adjust the .columns or the activecell.offset to total range??

adjusted script

Sub eachcolumndesending()
'
' eachcolumndesending Macro
' descending
'

'
    Columns("A:A").Select
    ActiveWorkbook.Worksheets("Sheet5").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Sheet5").Sort.SortFields.Add Key:=Range("A1"), _
        SortOn:=xlSortOnValues, Order:=xlDescending,    DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Sheet5").Sort
        .SetRange Range("A2:A32")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Columns("B:B").Select
    ActiveWorkbook.Worksheets("Sheet5").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Sheet5").Sort.SortFields.Add Key:=Range("B1"), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Sheet5").Sort
        .SetRange Range("B1:B33")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
How to&Answers:

I suggest you move away from the recorded code to what VBA actually requires for a single column sort.

Sub sortAllColumns()
    Dim c As Long

    On Error Resume Next  '<~~ may be necessary if a column breaks the sort 
    With Worksheets("Sheet5")
        For c = .UsedRange.Columns.Count To 1 Step -1
            With .Columns(c)
                .Cells.Sort Key1:=.Columns(1), Order1:=xlDescending, _
                            Orientation:=xlTopToBottom, Header:=xlGuess
            End With
        Next c
    End With
End Sub

Btw, you probably shouldn’t have to xlGuess at the existence of a header. Either one is there (xlYes) or not (xlNo) but you know your data better than I.