Excel 随机化列

Excel 随机化列,excel,random,shuffle,Excel,Random,Shuffle,有没有办法将一行中不同列的值随机化?以下是一个例子: 选项1选项2选项3选项4 格洛丽亚·斯图亚特·克莱尔·丹尼斯·金·贝辛格·凯特·温斯莱特 卡森戴利克里斯洛克马修佩里大卫阿奎特 莫霍克乌鱼 大爸爸小尼基水上男孩快乐吉尔摩 弗吉尼亚意大利英格兰德国 共有4列。目前,选项4下的所有输入都是问题的正确答案。我想将它们随机或随机排列在同一行中,这样答案可以是A、B、C或D,而不是每个问题的答案都是D。我有10000多个问题,所以单独修改它们会非常耗时。有什么帮助吗?我什么也找不到 使用VBA Opt

有没有办法将一行中不同列的值随机化?以下是一个例子:

选项1选项2选项3选项4

格洛丽亚·斯图亚特·克莱尔·丹尼斯·金·贝辛格·凯特·温斯莱特

卡森戴利克里斯洛克马修佩里大卫阿奎特

莫霍克乌鱼

大爸爸小尼基水上男孩快乐吉尔摩

弗吉尼亚意大利英格兰德国


共有4列。目前,选项4下的所有输入都是问题的正确答案。我想将它们随机或随机排列在同一行中,这样答案可以是A、B、C或D,而不是每个问题的答案都是D。我有10000多个问题,所以单独修改它们会非常耗时。有什么帮助吗?我什么也找不到

使用VBA

Option Explicit

Sub Sample()
    Dim ws As Worksheet
    Dim lRow As Long, i As Long
    Dim ar As Variant
    Dim varrRandomNumberList As Variant

    Set ws = Sheets("Sheet1")

    With ws
        lRow = .Range("A" & Rows.Count).End(xlUp).Row

        For i = 2 To lRow
            ar = .Range("A" & i & ":D" & i)

            varrRandomNumberList = UniqueRandomNumbers(4, 1, 4)

            .Range("A" & i).Value = ar(1, varrRandomNumberList(1))
            .Range("B" & i).Value = ar(1, varrRandomNumberList(2))
            .Range("C" & i).Value = ar(1, varrRandomNumberList(3))
            .Range("D" & i).Value = ar(1, varrRandomNumberList(4))
        Next i
    End With
End Sub

'~~> Function picked from
'~~> http://www.exceltip.com/st/Return_random_numbers_using_VBA_in_Microsoft_Excel/531.html
Function UniqueRandomNumbers(NumCount As Long, LLimit As Long, ULimit As Long) As Variant
    '~~> Creates an array with NumCount unique long random numbers in the range
    '~~> LLimit - ULimit (including)
    Dim RandColl As Collection, i As Long, varTemp() As Long
    UniqueRandomNumbers = False
    If NumCount < 1 Then Exit Function
    If LLimit > ULimit Then Exit Function
    If NumCount > (ULimit - LLimit + 1) Then Exit Function
    Set RandColl = New Collection
    Randomize
    Do
        On Error Resume Next
        i = CLng(Rnd * (ULimit - LLimit) + LLimit)
        RandColl.Add i, CStr(i)
        On Error GoTo 0
    Loop Until RandColl.Count = NumCount
    ReDim varTemp(1 To NumCount)
    For i = 1 To NumCount
        varTemp(i) = RandColl(i)
    Next i
    Set RandColl = Nothing
    UniqueRandomNumbers = varTemp
    Erase varTemp
End Function
选项显式
子样本()
将ws设置为工作表
朦胧如长,我如长
Dim-ar作为变体
Dim VARRANDOMNUMBERLIST作为变量
设置ws=图纸(“图纸1”)
与ws
lRow=.Range(“A”和Rows.Count).End(xlUp).Row
对于i=2至lRow
ar=.Range(“A”&i&“:D”&i)
varrRandomNumberList=UniqueRandomNumbers(4,1,4)
.Range(“A”&i).Value=ar(1,varrRandomNumberList(1))
.Range(“B”和i).Value=ar(1,varrRandomNumberList(2))
.Range(“C”和i).Value=ar(1,varrRandomNumberList(3))
.Range(“D”和i).Value=ar(1,varrRandomNumberList(4))
接下来我
以
端接头
“~~>函数从
'~~> http://www.exceltip.com/st/Return_random_numbers_using_VBA_in_Microsoft_Excel/531.html
函数UniqueRandomNumbers(NumCount为Long,LLimit为Long,ULimit为Long)作为变量
“~~>创建一个数组,其中NumCount唯一的长随机数在该范围内
'~~>LLimit-ULimit(包括)
Dim RandColl作为集合,i作为Long,varTemp()作为Long
UniqueRandomNumbers=False
如果NumCount<1,则退出函数
如果LLimit>ULimit,则退出函数
如果NumCount>(ULimit-LLimit+1),则退出函数
Set RandColl=新集合
随机化
做
出错时继续下一步
i=CLng(Rnd*(ULimit-LLimit)+LLimit)
RandColl.添加一,CStr(一)
错误转到0
循环直到RandColl.Count=NumCount
ReDim varTemp(1到NumCount)
对于i=1到NumCount
varTemp(i)=RandColl(i)
接下来我
设置RandColl=Nothing
UniqueRandomNumbers=varTemp
擦除varTemp
端函数
快照


使用RANDBETWEEN生成列偏移量,然后构造对4列之一的引用,并将RANDBETWEEN的结果传递给offset函数。