我维护一个包含多个列数据的Excel电子表格,可以通过各种方式进行排序以满足每个用户的需求。我使用宏设置了一些按钮在工作表上用于执行各种排序。
一个用户要求能够按照字母数字组合列进行排序,但是只按照数字进行排序。这些数据是飞机呼号,包含1到3个字母和1到5个数字。用户希望按照航班号码进行排序,而不考虑注册字母。
我发现了一个名为"num()"的函数可以实现此目的。我希望在不改变列中数据的情况下使用此函数。以下是我想要的示例:
Sub sortscenarionum()
'
' sortscenarionum Macro
' Sort Aircraft by FLIGHT NUMBER then RPO TIME
'
ActiveWorkbook.ActiveSheet.Sort.SortFields.Clear
ActiveWorkbook.ActiveSheet.Sort.SortFields.Add Key:=Range( _
"N11:N159"), SortOn:=num("N11:N159"), Order:=xlAscending, DataOption:= _
xlSortNormal
ActiveWorkbook.ActiveSheet.Sort.SortFields.Add Key:=Range( _
"I11:I159"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.ActiveSheet.Sort
.SetRange Range("B11:N159")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
SendKeys "{ESC}"
End Sub
出现“类型不匹配”错误。我也尝试了SortOn:=num(xlSortValues),但结果仍然是负面的。将该函数移入宏本身没有问题,但我不知道该如何实现。以下是该函数的内容:
Function num(rng As Range) As String
Dim n As Integer
For n = 1 To Len(rng)
If Mid(rng, n, 1) Like "[0-9]" Then
num = num & Mid(rng, n, 1)
End If
Next n
End Function
num
总是返回一个值吗?在排序之前添加一行Debug.Print num
,看看它返回了什么。 - dwironynum
,但是函数期望的是一个范围。 - Brian M Stafford