Excel 2010 VBA 入门 045 随机筛选指定个数的记录
示例
在实际工作中,经常需要从指定的记录中抽取选定数量的样本。如图所示,本例希望能够从员工列表中随机抽取5名员工的记录,该如何用VBA实现?
员工编号 | 姓名 | 部门 | 员工编号 | 姓名 | 部门 | |
0006 | 程建华 | 管理部 | 0314 | 张宏 | 销售部 | |
0009 | 李国敏 | 管理部 | 0215 | 林革壮 | 管理部 | |
0016 | 袁志刚 | 财务部 | 0247 | 申玲 | 管理部 | |
0017 | 周汉林 | 管理部 | 0052 | 于健惠 | 管理部 | |
0018 | 骈永富 | 管理部 | 0060 | 王文群 | 销售部 | |
0020 | 孙玉梅 | 管理部 | ||||
0023 | 陈亚菁 | 管理部 | ||||
0026 | 康小芸 | 销售部 | ||||
0028 | 刘晨 | 市场部 | ||||
0042 | 齐光 | 市场部 | ||||
0052 | 于健惠 | 管理部 | ||||
0060 | 王文群 | 销售部 | ||||
0066 | 曾国安 | 市场部 | ||||
0068 | 程光华 | 销售部 | ||||
0072 | 刘志峰 | 管理部 | ||||
0080 | 刘玉录 | 管理部 | ||||
0114 | 俞卫广 | 总经办 | ||||
0125 | 杨建军 | 管理部 | ||||
0209 | 曲波 | 人事部 | ||||
0215 | 林革壮 | 管理部 | ||||
0233 | 李卫卿 | 市场部 | ||||
0247 | 申玲 | 管理部 | ||||
0260 | 孙正发 | 销售部 | ||||
0265 | 毛传阳 | 财务部 | ||||
0288 | 张元端 | 市场部 | ||||
0293 | 朱凌波 | 管理部 | ||||
0314 | 张宏 | 销售部 | ||||
0327 | 郦锡文 | 销售部 | ||||
0328 | 张占斌 | 销售部 | ||||
0334 | 曹阳 | 销售部 | ||||
0352 | 周书敬 | 人事部 | ||||
0370 | 姚胜 | 财务部 | ||||
0371 | 郭建 | 销售部 | ||||
0374 | 高波 | 总经办 | ||||
0377 | 卢卫 | 销售部 | ||||
0391 | 赵秀池 | 销售部 | ||||
0399 | 罗卉宁 | 销售部 |
实现代码
Option ExplicitSub 随机选取数据()Dim MaxRowN As LongDim MinRowN As LongDim lCount As LongDim RowN As LongDim NewRow As Long'获取数据最大行号和最小行号MinRowN = 2MaxRowN = Cells(Rows.Count, "A").End(xlUp).Row'需要得到的结果数量初始化lCount = 5'结果数据位置行号初始化NewRow = 2'清除当前结果Range("E2:G" & Rows.Count).Clear'当需要的结果数量大于0时循环Do While lCount > 0'在最小行号和最大行号之间生成随机行号RowN = Int((MaxRowN - MinRowN + 1) * Rnd + MinRowN)'利用工作表函数判断结果区域是否存在If WorksheetFunction.CountIf(Range("E:E"), Cells(RowN, "A").Value) = 0 Then'当结果不存在时,复制记录Intersect(Rows(RowN), Columns("A:C")).Copy Cells(NewRow, "E")'结果行号+1NewRow = NewRow + 1'待生成的记录数量-1lCount = lCount - 1End IfLoop
End Sub
随机数Rnd函数
VBA的Rnd函数可以用来生成随机数,Rnd函数可以生成大于或等于0且小于1的Single类型的数字。
利用Rnd函数可以生成任意范围的随机整数,如需要生成的整型随机数上下限分别为“上限”和“下限”,则可以用以下表达式生成该范围内的整型随机数:
Int((上限-下限+1)*Rnd+下限)
本例需要随机挑选数据范围内的数据,即挑选行号介于第2行和数据最后一行之间的行,因而利用上述表达式可随机生成介于该范围内的行号。
不重复地挑选数据
由于需要生成不重复的记录,因而在正式复制单元格之前利用工作表函数Countif计算结果数据区域是否包含该行的数据,若没有,则进行赋值,若已经存在,则继续生成下一个随机数。如此重复,直到生成的数据数量满足设置要求。
Rnd函数语法
Rnd函数的实质是一个带有参数的函数,其语法如下:
Rnd[(number)]
Rnd函数用于产生一个大于或等于0且小于1的伪随机数列,每调用Rnd函数一次,即可生成该数列中的下一个随机数。参数number为可省略参数,其标志着随机数产生的种子。VBA将会以一个随机数生成算法,将Number作为起始数字,然后生成一个随机数。当再次调用Rnd函数时,Rnd函数将会以前一个生成的随机数作为种子生成一个随机数。此处,当参数Number大于0时,将产生固定的随机数。当Number大于0或省略时,则生成随机数序列的下一个随机数。当Number等于0时,则Rnd函数将会生成一个最近生成过的数字。
如果Number为 | 则 Rnd 生成 |
---|---|
小于 0 | 使用_number_作为种子时, 每次使用相同的数字。 |
大于 0 | 伪随机序列中的下一个号码。 |
等于 0 | 最近生成的数字。 |
未提供 | 伪随机序列中的下一个号码。 |
伪随机数概念
RND函数生成的是伪随机数。所谓伪随机数,看似为随机数,实质上在较长序列取值时还是有规律可循的。
Randomize语句
为了避免上述情况发生,可以在使用Rnd函数之前,使用Randomize语句对种子进行初始化,确保重新生成随机数序列。然而在对大量的数据进行测试时,仍然会得到相同的随机数列。但是一般情况下,Rnd函数完全可以满足日常工作需求。
Excel 2010 VBA 入门 045 随机筛选指定个数的记录相关推荐
- Excel 2010 VBA 入门 034 创建图片批注
目录 批注(Comment)对象 批注的添加与删除 FiIIFormat对象 OnError语句 示例: 批注(Comment)对象 Comment对象是单元格的一个属性,表示单元格的批注.Comme ...
- Excel 2010 VBA 入门 064 按照关键字批量创建超链接
目录 示例 实现代码 Hyperlink对象 创建超链接 删除超链接及访问超链接 创建超链接打开指定的宏代码 示例 如图所示,该表为某公司资产负债表以及关于报表的说明.为了方便阅读,现希望能够用VBA ...
- Excel 2010 VBA 入门 001显示开发工具选项卡
目录 VBA简介 宏简介 显示"开发工具"选项卡 VBA简介 Visual Basic for Application (VBA)是Visual Basic的一种宏语言,是依附 ...
- Excel 2010 VBA 入门 006 设置宏安全性
目录 操作方法 步骤1单击"开发工具"选项卡中的"宏安全性"按钮,如图所示. 步骤2在"信任中心"的"宏设置"选项中 ...
- Excel 2010 VBA 入门 047 判断某文本中是否包含指定字符(Instr)
示例 如图所示,该表为某公司采购清单.由于在记录时并未标记供应商来源地,只能通过E列供应商名称中寻找.现需要筛选出所有上海的供应商采购记录,该如何用VBA实现? 商品编码 入库日期 部门 业务员 供应 ...
- Excel 2010 VBA 入门 048 批量替换文本中的指定字符(replayce函数和方法)
目录 示例: 实现代码 Replace函数 单元格对象的Replace方法 使用Replace方法实现代码 示例: 如图所示,该表为某公司商品编码.由于商品目录升级,现商品编码中以"GXGY ...
- Excel 2010 VBA 入门 110 获取最小值的自定义函数
目录 例 码 使用ParamArray关键字声明数组参数 IsMissing函数 IsArray函数 函数的嵌套与递归 例 在VBA编程过程中,经常会使用工作表函数Min来确立某组数中 ...
- Excel 2010 VBA 入门 139 创建工作簿级的自定义选项卡
目录 题 码 Excel工作簿的实质 XML简介 customUI.xml 常用的功能区控件及通用属性 tabs控件和tab控件 group控件 命令控件 内置控件的ID customUI.xml中控 ...
- Excel 2010 VBA 入门 093 数据处理之建立数组
目录 示例 代码 数组的基本概念 数组的声明 数组的赋值与数组数据的读取 Ubound和Lbound函数获取数组的上下限 ForEach---Next循环遍历数组的注意事项 计算程序运行的时间 数组处 ...
最新文章
- Flex通过Iframe使用activex控件,点击除Iframe的其他地方后,Iframe内容消失
- Oracle 11g 单实例安装文档
- Android中selector的使用
- 第六章 逻辑回归-机器学习老师板书-斯坦福吴恩达教授
- Hadoop学习笔记—1.基本介绍与环境配置
- Markdown语法入门
- Nacos配置中心用法详细介绍
- 事件驱动java实现_基于spring实现事件驱动
- R语言是如何增强数据科学
- asp.net源码收集
- Html前端基础(这些基础标签你必须知道!)
- word 文档 一次性设置多张图片大小
- 算法设计与分析第二版源码
- android开发的小程序,一份基于Android平台系统下初学者开发的微信小程序的新
- python如何输出整数_如何根据Python中的输入输出整数和浮点值?
- 广域网宽带接入技术七GPON技术
- 抑制广播风暴 各种发包
- 山东理工ACM 1151 C语言实验——输出字符串
- 朝花夕拾 - 停更三月,期待 失败
- DecisionTreeClassifier决策树
热门文章
- 关于中大型项目的组织分工问题
- 除法指令div.divu
- python爬虫网站接口的使用——将网页上的输入内容的接口转移到对应的爬虫中(通过爬虫查询相关网页的信息)
- yum换源/QQ安装
- Python实战:病毒困我于斗室,桌面带我去旅行
- VisualSVN Server使用手册
- 中国象棋程序的设计与实现(三)--2012本科毕业论文等重要文档资料
- 即时消费、无接触配送、商品溯源......被按暂停的“零售行业“,正被疫情再次重启...
- python可视化第一篇——基于matplotlib库
- 唯众职教学生实训系统