从 Excel 的两列中各随机抽出一半,组成新的一列

文摘   2024-11-14 19:01   上海  

公众号平台最新的推送规则对技术类文章不太友善,如果不想错过干货,请务必 “设为星标”哦!!!


点击上方蓝字 --> 点击“...”--> 选择“设为星标


关于随机抽奖问题,比较麻烦的在于去重,即每个人只能抽到一次。


来看今天的案例。


案例:


从下图 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 allValuesA(i) = Cells(i, 1).Value Next i ' 收集B列的所有值 For i = 2 To 15 allValuesB(i) = 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 usedIndexesA(countA) = randomIndexA Cells(j, 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 usedIndexesB(countB) = randomIndexB Cells(j, 4).Value = allValuesB(randomIndexB) '将结果输出到D列 j = j + 1 Exit Do End If Loop Next iEnd 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 elementErrorHandler: Exit FunctionEnd Function

Sub ClearDColumns() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("Sheet1")

' 清空D列 ws.Range("D2:D" & ws.Cells(ws.Rows.Count, "D").End(xlUp).Row).ClearContentsEnd Sub


3. 关闭 VBE --> 在 Excel 工具栏中选择“开发工具”-->“插入”-->“按钮(窗体控件)”


4. 在弹出的对话框中选择 ...FillDColumn 这个宏 --> 点击“确定”


5. 将控件的默认文本修改为“分组”。


6. 选中控件 --> 右键单击 --> 在弹出的菜单中选择“复制”


7. 将复制出来的控件文本修改为“清空”。


8. 选中“清空”按钮 --> 右键单击 --> 在弹出的菜单中选择“指定宏”


9. 在弹出的对话框中选择 ...ClearDColumns 宏 --> 点击“确定”。


为了确保分组结果没有重复,再设置一下高亮显示重复值。


10. 选中 D 列 --> 选择工具栏的“开始”-->“条件格式”-->“突出显示单元格规则”-->“重复值”


11. 点击“确定”。


设置完成了。点击“分组”按钮,按要求自动分组,点击“清空”则清空分组结果。


12. 将文件保存为 .xlsm 格式。

转发、点赞、在看也是爱!

Excel学习世界
你遇到的所有 Excel 坑,我都帮你趟过了。
 最新文章