我想在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
答案 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列将以降序方式用作子排序。