示例

在实际工作中,经常需要从指定的记录中抽取选定数量的样本。如图所示,本例希望能够从员工列表中随机抽取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 随机筛选指定个数的记录相关推荐

  1. Excel 2010 VBA 入门 034 创建图片批注

    目录 批注(Comment)对象 批注的添加与删除 FiIIFormat对象 OnError语句 示例: 批注(Comment)对象 Comment对象是单元格的一个属性,表示单元格的批注.Comme ...

  2. Excel 2010 VBA 入门 064 按照关键字批量创建超链接

    目录 示例 实现代码 Hyperlink对象 创建超链接 删除超链接及访问超链接 创建超链接打开指定的宏代码 示例 如图所示,该表为某公司资产负债表以及关于报表的说明.为了方便阅读,现希望能够用VBA ...

  3. Excel 2010 VBA 入门 001显示开发工具选项卡

    目录 VBA简介 宏简介 显示"开发工具"选项卡 ​ VBA简介 Visual Basic for Application (VBA)是Visual Basic的一种宏语言,是依附 ...

  4. Excel 2010 VBA 入门 006 设置宏安全性

    目录 操作方法 步骤1单击"开发工具"选项卡中的"宏安全性"按钮,如图所示. ​ 步骤2在"信任中心"的"宏设置"选项中 ...

  5. Excel 2010 VBA 入门 047 判断某文本中是否包含指定字符(Instr)

    示例 如图所示,该表为某公司采购清单.由于在记录时并未标记供应商来源地,只能通过E列供应商名称中寻找.现需要筛选出所有上海的供应商采购记录,该如何用VBA实现? 商品编码 入库日期 部门 业务员 供应 ...

  6. Excel 2010 VBA 入门 048 批量替换文本中的指定字符(replayce函数和方法)

    目录 示例: 实现代码 Replace函数 单元格对象的Replace方法 使用Replace方法实现代码 示例: 如图所示,该表为某公司商品编码.由于商品目录升级,现商品编码中以"GXGY ...

  7. Excel 2010 VBA 入门 110 获取最小值的自定义函数

    目录 例 码 使用ParamArray关键字声明数组参数 IsMissing函数 IsArray函数 函数的嵌套与递归 ​​​​​​​ 例 在VBA编程过程中,经常会使用工作表函数Min来确立某组数中 ...

  8. Excel 2010 VBA 入门 139 创建工作簿级的自定义选项卡

    目录 题 码 Excel工作簿的实质 XML简介 customUI.xml 常用的功能区控件及通用属性 tabs控件和tab控件 group控件 命令控件 内置控件的ID customUI.xml中控 ...

  9. Excel 2010 VBA 入门 093 数据处理之建立数组

    目录 示例 代码 数组的基本概念 数组的声明 数组的赋值与数组数据的读取 Ubound和Lbound函数获取数组的上下限 ForEach---Next循环遍历数组的注意事项 计算程序运行的时间 数组处 ...

最新文章

  1. Flex通过Iframe使用activex控件,点击除Iframe的其他地方后,Iframe内容消失
  2. Oracle 11g 单实例安装文档
  3. Android中selector的使用
  4. 第六章 逻辑回归-机器学习老师板书-斯坦福吴恩达教授
  5. Hadoop学习笔记—1.基本介绍与环境配置
  6. Markdown语法入门
  7. Nacos配置中心用法详细介绍
  8. 事件驱动java实现_基于spring实现事件驱动
  9. R语言是如何增强数据科学
  10. asp.net源码收集
  11. Html前端基础(这些基础标签你必须知道!)
  12. word 文档 一次性设置多张图片大小
  13. 算法设计与分析第二版源码
  14. android开发的小程序,一份基于Android平台系统下初学者开发的微信小程序的新
  15. python如何输出整数_如何根据Python中的输入输出整数和浮点值?
  16. 广域网宽带接入技术七GPON技术
  17. 抑制广播风暴 各种发包
  18. 山东理工ACM 1151 C语言实验——输出字符串
  19. 朝花夕拾 - 停更三月,期待 失败
  20. DecisionTreeClassifier决策树

热门文章

  1. 关于中大型项目的组织分工问题
  2. 除法指令div.divu
  3. python爬虫网站接口的使用——将网页上的输入内容的接口转移到对应的爬虫中(通过爬虫查询相关网页的信息)
  4. yum换源/QQ安装
  5. Python实战:病毒困我于斗室,桌面带我去旅行
  6. VisualSVN Server使用手册
  7. 中国象棋程序的设计与实现(三)--2012本科毕业论文等重要文档资料
  8. 即时消费、无接触配送、商品溯源......被按暂停的“零售行业“,正被疫情再次重启...
  9. python可视化第一篇——基于matplotlib库
  10. 唯众职教学生实训系统