我试图找出如何在多个列上排序值,但我找不到答案
以下是现在的价值观:
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
以上只是我所拥有的巨大表格的一部分,但我只能按列或按行排序信息,但不是所有数据
知道该怎么做吗?
答案 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
在:
后: