我在互联网上搜索过,但显然没有人有同样的问题。我在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
出了什么问题?或者可能有更好的方法?在此先感谢您的帮助!
答案 0 :(得分:2)
或许更简单一点:
Sub SortLTable()
Range("B7:E11").Sort Key1:=Range("B7:E7"), Order1:=xlAscending, Orientation:=xlLeftToRight
End Sub
答案 1 :(得分:1)
暂时在A1和A7中放置一些内容,例如“A”,这样就可以有完整的表格(带有填充的标题列)。您可以在排序后删除这些值。
您使用With
和Rows
会使问题混乱:
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