从左到右排序(基于列)VBA

时间:2014-05-27 22:31:23

标签: excel vba sorting excel-vba

我在互联网上搜索过,但显然没有人有同样的问题。我在Excel,VBA工作。 我正在尝试根据某行中显示的值对列进行排序。这是一个例子:

      A       B       C       D       E
1           12QA03  12QA01  12QA02
2   Step 1  32      23      82
3   Step 2  43      92      1
4   Step 3  12      12      84
5   Step 4  65      89      51
6   
7           24QA93  24QA91  24QA95  24QA98
8   Step 1  94      77      83      28
9   Step 2  92      30      5       19
10  Step 3  19      82      16      49
11  Step 4  11      41      7       17

因此数据由两个表组成,用空行分隔。目标是得到这个:

      A       B       C       D       E
1           12QA01  12QA02  12QA03
2   Step 1  23      82      32
3   Step 2  92      1       43
4   Step 3  12      84      12
5   Step 4  89      51      65
6           
7           24QA91  24QA93  24QA95  24QA98
8   Step 1  77      94      83      28
9   Step 2  30      92      5       19
10  Step 3  82      19      16      49
11  Step 4  41      11      7       17

我编写了一个适用于顶级表的宏,但是第二个错误:

Sub SortData()

    'Sort top table
    With Range("B1:D5")
    .Rows.Sort Key1:=.Rows.Range("B1"), Order1:=xlAscending, _
    Orientation:=xlLeftToRight
    End With

    'Sort top table
    With Range("B7:E11")
    .Rows.Sort Key1:=.Rows.Range("B7"), Order1:=xlAscending, _
    Orientation:=xlLeftToRight
    End With

End Sub

出了什么问题?或者可能有更好的方法?在此先感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

或许更简单一点:

Sub SortLTable()
    Range("B7:E11").Sort Key1:=Range("B7:E7"), Order1:=xlAscending, Orientation:=xlLeftToRight
End Sub

答案 1 :(得分:1)

暂时在A1和A7中放置一些内容,例如“A”,这样就可以有完整的表格(带有填充的标题列)。您可以在排序后删除这些值。

您使用WithRows会使问题混乱:

Sub SortData()

    'Sort top table
    Range("A1,A7").Value = "A"
    Range("B1:D5").Sort Key1:=Range("B1"), Order1:=xlAscending, _
        Orientation:=xlLeftToRight

    'Sort top table
    Range("B7:E11").Sort Key1:=Range("B7"), Order1:=xlAscending, _
        Orientation:=xlLeftToRight
    Range("A1,A7").Value = ""
End Sub

答案 2 :(得分:1)

以下代码有效。

Sub SortLTable()
    Range("B1:D5").Sort Key1:=Range("B1:D1"), Order1:=xlAscending, Orientation:=xlLeftToRight
    Range("B7:E11").Sort Key1:=Range("B7:E7"), Order1:=xlAscending, Orientation:=xlLeftToRight
End Sub