ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 名课 - Python助力办公自动化 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
Python自动化办公应用大全 Excel 2021函数公式学习大典 Kutools for Office 套件发布 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖
楼主: jimingcheung

[求助] 请问遍历文件后的排序问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-5-25 13:09 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
'第1个自定义函数:提取小括号内数字
Public Function get_num_between_bracket(sr As String) As Double
Dim reg As New RegExp
With reg
    .Global = False
    .Pattern = "\(\d+"
    Set matc = .Execute(sr)
End With
get_num_between_bracket = CDbl(Replace(matc.Item(0).Value, "(", ""))
End Function

'第2个自定义函数:二维数组按值大小排序

Public Function sort_by_num_2col(arr)
Dim x&, y&, temp&, temp2&
'对特定数值进行排序即可,可使用选择法、冒泡法、插入法,这里是插入法
For x = 1 + 1 To UBound(arr)
    temp = arr(x, 1)
    temp2 = arr(x, 2)
    For y = x - 1 To 1 Step -1
        If arr(y, 1) <= temp Then Exit For
        arr(y + 1, 1) = arr(y, 1)
        arr(y + 1, 2) = arr(y, 2)
    Next y
    arr(y + 1, 1) = temp
    arr(y + 1, 2) = temp2
Next x
sort_by_num_2col = arr
End Function


'3、测试程序
Sub model()
Dim arr(), brr(), sort, res()
Dim h&, Row&
Row = Range("A" & Rows.Count).End(xlUp).Row
ReDim arr(1 To Row - 1)
ReDim brr(1 To Row - 1, 1 To 2)
ReDim sort(1 To Row - 1)
ReDim res(1 To Row - 1)
arr = Application.Transpose(Range("A2:A" & Row))
For h = 1 To Row - 1
    brr(h, 1) = get_num_between_bracket(CStr(arr(h))) '待排序数组
    brr(h, 2) = h   '映射arr
Next h
sort = sort_by_num_2col(brr) '排序完成,根据第2列顺序提取
For h = 1 To Row - 1
    res(h) = arr(sort(h, 2))
Next h
Range("C2:C" & Row) = Application.Transpose(res)
MsgBox "ok"
End Sub

截个图:
sort.jpg


TA的精华主题

TA的得分主题

 楼主| 发表于 2020-5-26 20:14 | 显示全部楼层
yongly1211 发表于 2020-5-25 13:09
'第1个自定义函数:提取小括号内数字
Public Function get_num_between_bracket(sr As String) As Double
...

太感谢了,亲测已成功,我也学到了许多。第二个自定义函数我没有看懂,我用的是冒泡排序。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-12-21 09:07 , Processed in 0.021627 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表