楼主 罗刚君 |
对单元格中的字符以分隔符为条件随机排序 知识点: 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 |
好东西,学习了~ |