对变量数组进行排序和子分类

时间:2015-04-17 20:01:01

标签: sorting excel-vba variant vba excel

我想在VBA中编写以下代码,这是签名

的功能
Public Function MySort( v as Variant) as Variant

采用变量v在其第一列中有名称,在第二列中有注释,检查它是否有两列,如果没有则抛出错误,如果它有两行,则执行以下操作:它对v进行排序根据v的第二列的行减少,然后,在一组相同的音符内,按字母顺序对其进行排序。例如,函数MySort将发送变体

A   14
D    3
B   14
E    3
C    3

变种

A   14
B   14
C    3
D    3
E    3

来自OP的评论

我试过这个,没有成功:

Public Function MySort(r As Range) As Range
    Dim r1 As Range
    Dim r2 As Range

    Set r1 = r.Columns(1)
    Set r2 = r.Columns(2)

    r.Sort Key1:=r1, Order1:=xlDescending, DataOption1:=xlSortNormal
    r.Sort Key2:=r2, Order2:=xlAscending, DataOption2:=xlSortNormal

    Tri = r 
End Function

1 个答案:

答案 0 :(得分:0)

VBA函数不会修改工作表上的值或结构,而不是它们所在的单元格。可以使用一个函数对变量数组进行排序,并将重新排序的结果传递回一个子函数,该函数将值返回到工作表但你最好只使用sub来执行排序,除非你有一些无法按常规处理的自定义排序标准。

Sub sort_A1CR(Optional ws As Variant) 'expect a worksheet object, not a worksheet name

    If IsMissing(ws) Then Set ws = ActiveSheet
    With ws.Cells(1, 1).CurrentRegion
        .Cells.Sort Key1:=.Columns(1), Order1:=xlAscending, _
                    Key2:=.Columns(2), Order2:=xlDescending, _
                    Orientation:=xlTopToBottom, Header:=xlYes
    End With

End Sub

您的示例代码与您的结果相矛盾。这将以列A作为升序中的主键进行排序。如果在A列中找到重复值,则B列将以降序方式用作子排序。