关于VBA宏的问题

2025-05-21 10:41:33
推荐回答(1个)
回答(1):

你的代码是一个随机选择过程,建议的洗牌,多列的改动不大,只是数组定义为多列、交换的语句要用循环而已,希望在粘贴代码之前尽量理解:

Sub RndSort() 
    Dim arr, i, n
    n = [a2].End(4).Row '获取最大行位置 
    arr = [a2].Resize(n, 2) '读取A列数据到数组arr 
    Randomize '随机种子初始化 以保证每次得到不同的随机序列 
    For i = 1 To n '遍历各行 
        r = Int(Rnd * (n - i)) + i '从余下的位置中随机抽一个 
        t = arr(r, 1): arr(r, 1) = arr(i, 1): arr(i, 1) = t '随机位置r和当前位置交换 得到随机乱序
        t = arr(r, 2): arr(r, 2) = arr(i, 2): arr(i, 2) = t
    Next 
    [a2].Resize(n, 2) = arr '随机乱序后的结果写入工作表
End Sub

修改三个地方,ReSize增加列数2,交换语句增加一行同时交换第2列