基于最后一列对数据进行排序

时间:2014-08-06 15:50:12

标签: vba sorting excel-vba excel

所以我有6列(列A:F)。 A列包含日期,而B-E包含基于日期的数据。列F包含(L,RI或R)的类别。我已经将所有的L's,RI和R组合在一起所以我只想在他们自己的类别中进行排序。

我的问题是日期分散在每个类别中,我需要按最早的最新日期对它们进行排序。所以说比如说,L'从F2:F18下降。所以我需要对A1:F18中的日期进行排序,只需对该部分进行排序,否则它将与类别的RI,R中的其他数据混合。而RI则来自F19:F24所以我需要对A19中的数据进行排序:F24

我需要一个VBA代码,用于对自己类别中最新,最新的日期进行排序。数据发生了变化,因此有时可能会有更多或更少的类别。

我尝试录制一个宏来获得头脑,但我确实不知道要改变什么,因为我是VBA的新手。如果我不必手动选择它,肯定会更容易。 很抱歉,如果我的描述性不够,我觉得我很难解释事情但是我已经尽力了以下是代码:

Range("A1:F23").Select
ActiveWorkbook.Worksheets("Sheet4").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet4").Sort.SortFields.Add Key:=Range("A2:A23") _
    , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet4").Sort
    .SetRange Range("A1:F23")
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With
Range("A24:F33").Select
ActiveWorkbook.Worksheets("Sheet4").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet4").Sort.SortFields.Add Key:=Range("A25:A33") _
    , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet4").Sort
    .SetRange Range("A24:F33")
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

End Sub

1 个答案:

答案 0 :(得分:0)

考虑更改您的操作顺序。我建议先按日期排序所有数据(A栏),然后按其他标准排序(F栏)。这样做应该在每个L,RI,R中按日期排序数据。

在“数据”功能区下使用过滤器工具时,不应要求VBA代码来完成我所描述的内容。

如果你真的想自动化这个:

Rows("1:1").Select 'Column Headers Row
Selection.AutoFilter
ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort.SortFields.Add Key:=Range _
    ("A1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
    xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With
ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort.SortFields.Add Key:=Range _
    ("F1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
    xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

End Sub