ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > Excel VBA > 对单元格中的字符以分隔符为条件随机排序

对单元格中的字符以分隔符为条件随机排序

作者:绿色风 分类: 时间:2022-08-18 浏览:93
楼主
罗刚君
对单元格中的字符以分隔符为条件随机排序

 
知识点:
1.使用Function过程制作自定义函数
2.将Volatile的参数赋值为True,从而按下F9键时可以更新排序结果
3.使用Split函数将数据源转换成数组
4.使用Ubound函数计算数组的上标
5.使用VBA的rnd函数生成随机数,并用它作为数组的索引用提取数组中对应的元素的值,从而实现随机性
6.使用For Next遍历数组修改每一个元素
7.使用Join函数将数组转换成字符串
8.使用Instr函数判断数arr2中是否存在变量Mystr的值。为了纠错(处理意外情况),特在字符串前面添加“,”
9.使用Do Loop循环语句配合Instr函数逐一判断变量Mystr是否已经存在于数组arr2中
10.当变量Mystr是否未存在于数组arr2中时,将变量Mystr的值赋予数组,然后通过exit do语句终止循环

Function 随机排序(数据源 As Range, Optional 分隔符 As String = ",") As String
    Application.Volatile True
    If InStr(数据源(1).Text, 分隔符) = 0 Then 随机排序 = 数据源(1).Text: Exit Function
    Dim arr, arr2, Mystr As String, Mystr2 As String
    Mystr = Replace(WorksheetFunction.Trim(Replace(Replace(数据源(1).Text, " ", "~"), 分隔符, " ")), "~", " ")
    arr = Split(Mystr, " ")
    ReDim arr2(0 To UBound(arr))
    For i = 0 To UBound(arr)
        Do
            Mystr2 = arr(Rnd * UBound(arr))
            If InStr("," & Join(arr2, ",") & ",", "," & Mystr2 & ",") = 0 Then
                arr2(i) = Mystr2
                Exit Do
            End If
        Loop
    Next i
    随机排序 = Replace(Join(arr2, 分隔符), "~", " ")
End Function
2楼
bg4edz
好东西,学习了~

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap