如何在多个列

时间:2016-10-07 00:01:10

标签: excel excel-vba excel-formula vba

我试图找出如何在多个列上排序值,但我找不到答案

以下是现在的价值观:

            A   B   C   D   E   F
Row(1)     20   1   3   5   2   4  
Row(2)     19  11  12  14  16   8

我想找到一种方法来按照以下方式订购它们

            A   B   C   D   E   F
Row(1)      1   2   3   4   5   8
Row(2)     11  12  14  16  19  20

以上只是我所拥有的巨大表格的一部分,但我只能按列或按行排序信息,但不是所有数据

知道该怎么做吗?

1 个答案:

答案 0 :(得分:3)

您可以使用System.Collections.ArrayList来平展二维范围。如果您需要,ArrayList对象具有.Sort方法(以及.Reverse方法)。

因此,这种方法捕获范围,将其转储到ArrayList,对其进行排序(升序),然后将其写回原始范围:

Option Explicit
Sub foo()
Dim sel As Range

Dim arr As Variant, val As Variant
Dim lst As Object
Dim i As Long

'Simplistic case of capturing the range to operate against, modify if needed
Set sel = Application.InputBox("Please select the table (excluding headers) to sort", "Flatten & sort", Type:=8)
' Dump the range values in a 2-d array
arr = sel.Value

'Flatten the range/array in to the ArrayList object
Set lst = CreateObject("System.Collections.ArrayList")
For Each val In arr
    lst.Add val
Next

'Sort the ArrayList
lst.Sort
' If you ever need to reverse the list, you can do:
' lst.Reverse

' Dump the sorted ArrayList values back to the worksheet:
For i = 1 To lst.Count 
    sel(i) = lst.Item(i - 1) 
Next

End Sub

在:

enter image description here

后:

enter image description here