按字母顺序对字母数字文本进行排序 VBA
Sorting alphanumeric text as alphabetically VBA
我有一个 excel 有字母数字文本的表,如图所示:
我想使用自定义排序列表将所有行排序为(“无线”、“固定电话”、“VOIP”),
vba 代码工作但是它把数据排序为数字,而我想按字母顺序排序数据并忽略数字
请告诉我解决方案。
Sub SortIndividualR()
'Updateby Extendoffice
Dim xRg As Range, yRg As Range, vCustom_Sort As Variant, rr As Long
vCustom_Sort = Array("Wireless", "Landline", "VOIP", Chr(42))
Application.AddCustomList ListArray:=vCustom_Sort
If TypeName(Selection) <> "Range" Then Exit Sub
Set xRg = Selection
If xRg.Count = 1 Then
MsgBox "Select multiple cells!", vbExclamation, "Kutools for Excel"
Exit Sub
End If
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
Application.ScreenUpdating = False
For Each yRg In xRg.Rows
yRg.NumberFormat = "@"
yRg.Sort Key1:=yRg.Cells(1, 1), Order1:=xlAscending, _
Orientation:=xlSortRows, Header:=xlYes, MatchCase:=False, _
OrderCustom:=Application.CustomListCount + 1
Next yRg
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
End With
Application.ScreenUpdating = True
End Sub
假设:
- 每个单元格中存在这三个选项之一;
- 每个单元格的格式根据您的示例数据;
- 你不需要 VBA 本身;
- 访问 ms365。
F1
中的公式:
=LET(X,TOROW(A1:D1,1),SORTBY(X,FIND(MID(X,18,1),"WLV"),,X,))
我选择第一次按您的自定义范围排序,第二次按实际数字排序 string。
如果您没有 TOROW()
的访问权限,您可以更改为 FILTER()
:
=LET(X,FILTER(A1:D1,A1:D1<>""),SORTBY(X,FIND(MID(X,18,1),"WLV"),,X,))
我有一个 excel 有字母数字文本的表,如图所示:
我想使用自定义排序列表将所有行排序为(“无线”、“固定电话”、“VOIP”),
vba 代码工作但是它把数据排序为数字,而我想按字母顺序排序数据并忽略数字 请告诉我解决方案。
Sub SortIndividualR()
'Updateby Extendoffice
Dim xRg As Range, yRg As Range, vCustom_Sort As Variant, rr As Long
vCustom_Sort = Array("Wireless", "Landline", "VOIP", Chr(42))
Application.AddCustomList ListArray:=vCustom_Sort
If TypeName(Selection) <> "Range" Then Exit Sub
Set xRg = Selection
If xRg.Count = 1 Then
MsgBox "Select multiple cells!", vbExclamation, "Kutools for Excel"
Exit Sub
End If
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
Application.ScreenUpdating = False
For Each yRg In xRg.Rows
yRg.NumberFormat = "@"
yRg.Sort Key1:=yRg.Cells(1, 1), Order1:=xlAscending, _
Orientation:=xlSortRows, Header:=xlYes, MatchCase:=False, _
OrderCustom:=Application.CustomListCount + 1
Next yRg
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
End With
Application.ScreenUpdating = True
End Sub
假设:
- 每个单元格中存在这三个选项之一;
- 每个单元格的格式根据您的示例数据;
- 你不需要 VBA 本身;
- 访问 ms365。
F1
中的公式:
=LET(X,TOROW(A1:D1,1),SORTBY(X,FIND(MID(X,18,1),"WLV"),,X,))
我选择第一次按您的自定义范围排序,第二次按实际数字排序 string。
如果您没有 TOROW()
的访问权限,您可以更改为 FILTER()
:
=LET(X,FILTER(A1:D1,A1:D1<>""),SORTBY(X,FIND(MID(X,18,1),"WLV"),,X,))