公众号平台最新的推送规则对技术类文章不太友善,如果不想错过干货,请务必 “设为星标”哦!!!
点击上方蓝字 --> 点击“...”--> 选择“设为星标”
关于随机抽奖问题,比较麻烦的在于去重,即每个人只能抽到一次。
来看今天的案例。
案例:
从下图 1 中的男和女中各抽出 7 个不重复的人,组成一个新的组,放置在 D 列中。
效果如下图 2 所示。
解决方案:
1. 将光标放置到工作表名称处 --> 右键单击 --> 在弹出的菜单中选择“查看代码”
2. 在 VBE 中输入以下代码:
Sub Macro1_FillDColumn()
Dim i As Integer, j As Integer
Dim randomIndexA As Integer, randomIndexB As Integer
Dim usedIndexesA() As Integer, usedIndexesB() As Integer
Dim countA As Integer, countB As Integer
Dim allValuesA() As Variant, allValuesB() As Variant
初始化变量
countA = 0
countB = 0
ReDim usedIndexesA(1 To 7)
ReDim usedIndexesB(1 To 7)
ReDim allValuesA(2 To 15)
ReDim allValuesB(2 To 15)
j = 2 ' 起始输出到D2
收集A列的所有值
For i = 2 To 15
Cells(i, 1).Value =
Next i
收集B列的所有值
For i = 2 To 15
Cells(i, 2).Value =
Next i
随机选择A列的7个不重复数据
For i = 1 To 7
Do
randomIndexA = Int((15 - 2 + 1) * Rnd + 2) ' A2:A15
If Not IsInArray(randomIndexA, usedIndexesA) Then
countA = countA + 1
randomIndexA =
4).Value = allValuesA(randomIndexA) '将结果输出到D列
j = j + 1
Exit Do
End If
Loop
Next i
随机选择B列的7个不重复数据
For i = 1 To 7
Do
randomIndexB = Int((15 - 2 + 1) * Rnd + 2) ' B2:B15
If Not IsInArray(randomIndexB, usedIndexesB) Then
countB = countB + 1
randomIndexB =
4).Value = allValuesB(randomIndexB) '将结果输出到D列
j = j + 1
Exit Do
End If
Loop
Next i
End Sub
Function IsInArray(valToBeFound As Integer, arr As Variant) As Boolean
Dim element As Variant
'判断随机数是否重复
On Error GoTo ErrorHandler
IsInArray = False
For Each element In arr
If element = valToBeFound Then
IsInArray = True
Exit Function
End If
Next element
ErrorHandler:
Exit Function
End Function
Sub ClearDColumns()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
清空D列
D" & ws.Cells(ws.Rows.Count, "D").End(xlUp).Row).ClearContents :
End Sub
3. 关闭 VBE --> 在 Excel 工具栏中选择“开发工具”-->“插入”-->“按钮(窗体控件)”
4. 在弹出的对话框中选择 ...FillDColumn 这个宏 --> 点击“确定”
5. 将控件的默认文本修改为“分组”。
6. 选中控件 --> 右键单击 --> 在弹出的菜单中选择“复制”
7. 将复制出来的控件文本修改为“清空”。
8. 选中“清空”按钮 --> 右键单击 --> 在弹出的菜单中选择“指定宏”
9. 在弹出的对话框中选择 ...ClearDColumns 宏 --> 点击“确定”。
为了确保分组结果没有重复,再设置一下高亮显示重复值。
10. 选中 D 列 --> 选择工具栏的“开始”-->“条件格式”-->“突出显示单元格规则”-->“重复值”
11. 点击“确定”。
设置完成了。点击“分组”按钮,按要求自动分组,点击“清空”则清空分组结果。