Excel表格按照字符后面的数值排序
1、打开Excel表格,点击【开发工具】、【Visual Basic】调出VBE编辑器。

2、点击【插入】、【模块】。

3、在模块代码框里边输入以下VBA程序代码。
Sub NumberPaixu()
Dim i1, i2, i3, str1
On Error Resume Next
Application.ScreenUpdating = False '关闭屏幕显示更新
Set mysheet3 = ThisWorkbook.Worksheets("Sheet3") '定义工作表Sheet3
For i1 = 2 To 1000 '从第2行到1000行
Set MyCell = mysheet3.Cells(i1, 1) '定义单元格
If MyCell <> "" Then '如果单元格不是空白,则
For i2 = 1 To Len(MyCell) '对单元格里边的每一个字符进行截取、判断
str1 = Mid(MyCell, i2, 1)
If IsNumeric(str1) = True Then '如果截取的字符是数字,则
i3 = i3 + 1
mysheet3.Cells(i1, 2) = Left(MyCell, i2 - 1) '写入B列单元格
mysheet3.Cells(i1, 3) = Right(MyCell, Len(MyCell) - i2 + 1) '写入C列单元格
Exit For '退出For循环
End If
Next
End If
Next
mysheet3.Sort.SortFields.Clear '清除高级筛选里边的条件
mysheet3.Sort.SortFields.Add Key:=Range("C2:C1000"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With mysheet3.Sort '筛选
.SetRange Range("A2:C1000")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
For i1 = 1 To i3
mysheet3.Cells(i1 + 1, 1) = mysheet3.Cells(i1 + 1, 2) & mysheet3.Cells(i1 + 1, 3)
Next
mysheet3.Columns("B:C").Delete '删除B、C列
Application.ScreenUpdating = True '恢复屏幕更新显示
End Sub

4、确认无误后(主要是B、C两列里边没有数据),在VBE编辑器的功能区里边点击“运行”图标运行程序。

5、回到Excel工作表界面,将会看到A列数据的排序结果。

1、VBA程序思路解读:
1、采用通常的方法排序,其只会按照字母顺序排序,因此,可以将单元格里面的字符和数字分开,再对数值按照升序排序,最后把它们撮合。
2、程序里边关闭屏幕显示更新可以提高运行速度。
3、筛选时需要先清除筛选条件,再筛选,以免多次筛选时高级筛选里边的筛选条件过多。
4、由于借助的是B、C两列作为辅助列,因此,需要确保这两列上面没有数据,以免造成B、C两列的数据丢失。
