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