gpt4 book ai didi

excel - 在排序宏中使用 VBA 函数

转载 作者:行者123 更新时间:2023-12-02 16:34:43 27 4
gpt4 key购买 nike

我维护一个 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

最佳答案

添加一个列作为辅助工具;填充然后对新列进行排序;删除新列。

Sub sortscenarionum()
With ActiveWorkbook.ActiveSheet
.Columns("O").Insert
With .Range(.Cells(11, "B"), .Cells(.Rows.Count, "N").End(xlUp).Offset(0, 1))
.Columns(.Columns.Count).Formula = "=numsOnly(N11)"
.Columns(.Columns.Count).Value = .Columns(.Columns.Count).Value
.Sort Key1:=.Columns(.Columns.Count), Order1:=xlAscending, _
Key2:=.Columns(8), Order2:=xlAscending, _
Orientation:=xlTopToBottom, Header:=xlNo
End With
.Columns("O").Delete
End With
End Sub

Function numsOnly(str As String)
'with rgx as static, it only has to be created once
Static rgx As Object
If rgx Is Nothing Then
Set rgx = CreateObject("VBScript.RegExp")
End If
numsOnly = vbNullString

With rgx
.Global = True
.MultiLine = False
.Pattern = "[0-9]{1,5}$"
If .test(str) Then
numsOnly = CLng(.Execute(str)(0))
End If
End With
End Function

关于excel - 在排序宏中使用 VBA 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50644225/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com