ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

请教EXCEL用按钮随机抽取单个数,且能多次不重复抽取,直到指定数抽完

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-1-21 14:20 | 显示全部楼层 |阅读模式
本帖最后由 snpgfiq 于 2014-1-21 14:23 编辑

请教高人老师,我工作上用,但我刚接触宏,请越详细越好,
环境:表一A1:A20内容为1~20;表二初始为空,用于存放抽取后的剩余数;表三初始空,用于存放抽取后的结果;表四为显示打印表,A1:A20=表三A1:A20,设有“抽取”和“重置”按钮。
抽取按钮:判断表三A1:A20数据个数N不为0,执行随机抽取表二A1:A20的一个数,存放于表三A(N+1)且删除表二中该行;否则执行复制表一A1:A20到表二A1:A20,随机抽取表二A1:A20的一个数存放于表三A1中,并删除表二中抽取数的该行。
重置按钮:清空表二和表三内容。
麻烦老师们了,万分感谢!!!

TA的精华主题

TA的得分主题

发表于 2014-1-21 18:52 | 显示全部楼层
纯普通函数(但03要加载宏):

分步抽取不重复数据-h.rar

7.51 KB, 下载次数: 271

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-1-22 08:23 | 显示全部楼层
万分感谢!!!!{:soso_e179:}
我用的是03,帮忙改一下,我这个,我用的宏不对,老出错

抽取重置.rar

11.21 KB, 下载次数: 90

点评

对于vba,你是老师,我才是白痴!  发表于 2014-1-22 08:36

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-1-22 08:25 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 snpgfiq 于 2014-1-22 08:41 编辑
hhjjpp 发表于 2014-1-21 18:52
纯普通函数(但03要加载宏):


谢谢啦!!
如何给你献花啊,,,我找半天没找到。。
我想修改重置和抽取的位置,请问怎么修改,还有,我用的是03,在这显示#NAME

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-1-22 08:44 | 显示全部楼层
snpgfiq 发表于 2014-1-22 08:23
万分感谢!!!!
我用的是03,帮忙改一下,我这个,我用的宏不对,老出错

我语句都不懂,是照着网上一点一点的凑的,,这种思路是我自己想的,不知道能行不

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-1-22 08:45 | 显示全部楼层
感谢二楼老师。{:soso_e163:}
我语句都不懂,是照着网上一点一点的凑的,,这种思路是我自己想的,不知道能行不

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-1-22 08:50 | 显示全部楼层
本帖最后由 snpgfiq 于 2014-1-22 09:01 编辑

这是抽取,但很多地方有错误,请帮忙改下

Private Sub CommandButton2_Click()
Dim M As Integer, N As Integer, SJS As Integer
  N = ActiveSheet4.Range("A100").End(xlUp).Row ‘N我想作为统计抽取结果的个数,但语句不对
  M = Sheet3.Range("A100").End(xlUp).Row ’M读取抽取后剩余数据,作为下一次抽取的数据源,语句也不对。还有当第一次抽
                                                                        取时M读取的是不是空
If N <> 0 Then
  Do
  SJS = Int((M * Rnd) + 1)
  Sheet4.Cells(N + 1, 1).Value = SJS
  Sheet3.Rows(SJS).Delete
  Loop
Else
  Do
  Range(Sheet2.Cells(1, 1), Sheet2.Cells(100, 1)).Copy Sheet3.Cells(1.1)
  SJS = Int((M * Rnd) + 1)
  Sheet4.Cells(N + 1, 1).Value = SJS
  Sheet3.Rows(SJS).Delete
  Loop
End If
End Sub
其中sheet1为显示基表,2为备选数据,3为抽取后剩余,4为抽取结果存放,如果4没用的话,直接结果到1也行

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-23 09:36 , Processed in 0.036917 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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