ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: yide1112

[求助] 求一个从100名员工中,按性别随机抽取30名男生,20名女生的VBA代码

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-5-31 07:51 | 显示全部楼层
男、女同时抽取时:

Option Explicit
Public xx As Boolean
Public yy As Boolean

Private Sub CommandButton1_Click()
Dim a As Collection, b As Collection, j&, m&, n&, jj&, mm&, nn&
If CommandButton1.Caption = "抽取开始" Then
   CommandButton1.Caption = "抽取停止"
   xx = True
   yy = True
   Do While xx = True Or yy = True
      Set a = New Collection
      Set b = New Collection
      For m = 2 To 101
        If Cells(m, 3) = "男" Then
         a.Add m
        End If
      Next m
      For j = 2 To 31
         n = Int(Rnd * a.Count) + 1
         Cells(j, 4) = Cells(a(n), 2)
         a.Remove (n)
      Next
      For mm = 2 To 101
        If Cells(mm, 3) = "女" Then
         b.Add mm
        End If
      Next mm
      For jj = 2 To 21
         nn = Int(Rnd * b.Count) + 1
         Cells(jj, 5) = Cells(b(nn), 2)
         b.Remove (nn)
      Next
      DoEvents
   Loop
Else
   CommandButton1.Caption = "抽取开始"
   xx = False
   yy = False
End If
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-5-31 07:51 | 显示全部楼层
参考附件             求助:按性别随机抽取指定数量的男女生2.rar (25.7 KB, 下载次数: 16)

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-5-31 21:08 | 显示全部楼层
yaozong 发表于 2018-5-30 20:46
Option Explicit
Public xx As Boolean

麻烦,请注释下这一句:
n = Int(Rnd * a.Count) + 1

TA的精华主题

TA的得分主题

发表于 2018-6-1 11:41 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-6-1 13:41 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 香川群子 于 2018-6-1 13:44 编辑

我也凑热闹来一个。

我出手必是精品。

  1. Sub test() 'by kagawa 2018/06/01
  2.     ar = [a1].CurrentRegion '读取数据
  3.     m = UBound(ar)          '最大行数m
  4.     [d2].Resize(m, 2) = ""  '清空输出区域
  5.     n1 = [d1]: n2 = [e1]    '提取男、女数量
  6.     Randomize               '随机种子初始化保证每次结果随机
  7.     For i = 2 To m          '数组随机乱序洗牌算法
  8.         r = Int(Rnd * (m - i + 1)) + i  '不重复随机乱序位置r
  9.         t = ar(r, 1): ar(r, 1) = ar(i, 1): ar(i, 1) = t '保证不重复的洗牌交换
  10.         If ar(t, 3) = "男" Then
  11.             If n1 Then Cells(n1 + 1, 4) = ar(t, 2): n1 = n1 - 1 '输出男生
  12.         Else
  13.             If n2 Then Cells(n2 + 1, 5) = ar(t, 2): n2 = n2 - 1 '输出女生
  14.         End If
  15.     Next
  16.     MsgBox "OK"
  17. End Sub
复制代码

按性别随机抽取指定数量的男女生.zip

19.94 KB, 下载次数: 46

评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-6-1 13:46 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

会看了一下大家的代码,你的这个代码,和我的思路是最接近的了。

但是细节有差异。我的比你简洁一点点吧。

TA的精华主题

TA的得分主题

发表于 2018-6-1 14:35 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
香川群子 发表于 2018-6-1 13:46
会看了一下大家的代码,你的这个代码,和我的思路是最接近的了。

但是细节有差异。我的比你简洁一点点 ...

感谢群子老师的回复,确实简洁而且效率还高点。

我这代码苯了一点,先洗一遍再顺序抽牌,随机概率没有问题,效率差了一点(循环数:ubound(arr,1)+50)。老师这代码的循环数是ubound(arr,1)-1,觉得如果在循环中再加个条件循环数还可减少(最差情况还是ubound(arr,1)-1,但出现这种情况的可能性非常小,最好情况是50)。if n1+n2=0 then exit for

以后碰到类似的问题我用这方法:边洗边抽。哈哈哈

TA的精华主题

TA的得分主题

发表于 2018-6-2 08:36 | 显示全部楼层
香川群子 发表于 2018-6-1 13:41
我也凑热闹来一个。

我出手必是精品。

在 for循环中 加一句判断 If n1 + n2 = 0 Then Exit For

是否 影响 效率?

TA的精华主题

TA的得分主题

发表于 2018-6-2 09:54 | 显示全部楼层
香川群子 发表于 2018-6-1 13:41
我也凑热闹来一个。

我出手必是精品。

脸厚不会红。
1、        ar(i, 1) = t纯属蛇足;
2、        当男或女一个取完后,也许在做无用功;
3、        逐个操作单元格就不用说了。
4、        简单也说不上。

TA的精华主题

TA的得分主题

发表于 2018-6-2 09:56 | 显示全部楼层
  1. Sub test()
  2. Application.ScreenUpdating = False
  3. Range("d2:e65536").ClearContents
  4. Range("f2") = "=rand()"
  5. n = [b65536].End(3).Row
  6. Range("f2:f" & n).FillDown
  7. Range("a2:f" & n).Sort [c2], 1, [f2], , 1
  8. Range("b2").Resize(30).Copy [d2]
  9. Range("b" & n - 20 & ":b" & n).Copy [e2]
  10. Range("a2:c" & n).Sort [a2], 1
  11. Range("f2:f" & n).ClearContents
  12. Application.ScreenUpdating = True
  13. End Sub
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-22 12:06 , Processed in 0.042171 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表