分享好友 办公首页 办公分类 切换频道

利用excel中vba代码随机生成姓名列表的方法

2020-11-20 18:21浙江2080
内容提要:文章介绍使用excel中VBA代码来随机生成姓名,并介绍其使用方法和提供源文件下载。

窝窝论坛上我们每天都会发布excel练习题给窝友们学习,在出题时,经常会遇到模拟随机生成姓名和数据。

数字可以使用rand、RANDBETWEEN函数来随机生成。可是姓名如何弄呢,本文介绍使用VBA自动随机生成姓名。

具体的随机生成姓名如下介绍:

第一步,新建一个excel工作薄

这个工作薄里面包含两个工作表,分别是“姓名数据”和“生成随机姓名”。

其中的“姓名数据”工作表,有三列数据:百家姓、男子名、女子名,是我们之前已经输入好了的。

excel随机生成姓名

第二步,切换到“生成随机姓名”工作表,单击“生成随机姓名”按钮,excel会出现一个输入框,提示我们输入要生成的人名数。比如我们输入100,单击“确定”,此工作表A列就会随机生成姓名100个。

下面提供随机生成姓名的VBA代码,使用方法是按下ALT+F11组合键,打开VBE编辑器,插入——模块,复制下面的代码,然后为了操作方便,我们在“生成随机姓名”工作表中插入了一个按钮,将这段代码指定给按钮。

Sub随机生成姓名()
DimArr,Arr2,Arr3,I%,N&,SAsBoolean,Str$,Dic,A&,B&
N=Val(InputBox("请输入要生成的人名数:"))    '输入要生成的随机人名数量
IfN=0ThenExitSub     '如果未输入或点了取消则退出程序
SetDic=CreateObject("scripting.dictionary") '创建字典项目,用于清除生成的重复的人名
WithSheet1    '从sheet1中读取数据并随机生成姓名
   Arr=.Range(.[a2],.Cells(.Rows.Count,1).End(3)) '读取百家姓放入数组
   Arr2=.Range(.[b2],.Cells(.Rows.Count,2).End(3))   '读取男子名常用字放入数组
   Arr3=.Range(.[c2],.Cells(.Rows.Count,3).End(3))    '读取女子名常用字放入数组
   Do '循环执行
       Str=""      '先清空用于存储生成的名字的变量
       S=Rnd>0.5  '用取得的随机数来判断生成男子名还是女子名
       I=2+IIf(Rnd>0.8,0,1)   '用随机数确定生成的名字的字符数(80%的几率为三个字)
       IfSThen  '如果是男子名,则
           A=Int(Rnd*(UBound(Arr)-2))+2   '取得姓对应的数组下标
           B=Int(Rnd*(UBound(Arr2)-2))+2  '取得名字的对应下数组下标
           Str=Arr(A,1)&Arr2(B,1)   '串接名字
           IfI>2Then  '如果名字的字符数大于2,则再得一次名字的字符下标并串接给字符串变量
               B=Int(Rnd*(UBound(Arr2)-2))+2
               Str=Str&Arr2(B,1)
           EndIf
       Else   '如果是女子名,则取对应的女子名数组内容,处理方式同上
           A=Int(Rnd*(UBound(Arr)-2))+2
           B=Int(Rnd*(UBound(Arr3)-2))+2
           Str=Arr(A,1)&Arr3(B,1)
           IfI>2Then
               B=Int(Rnd*(UBound(Arr3)-2))+2
               Str=Str&Arr3(B,1)
           EndIf
       EndIf
       Dic(Str)=""  '将随机姓名放入字典中
   LoopUntilDic.Count=N   '如果字典项目数量达到输入的数值则跳出循环
EndWith
WithSheet2    '将结果写入sheet2中
   .Cells.Clear   '清空原有内容
   IfDic.Count>65536Then  '防止数量太多时无法转置及数据超出单元格最大行号的情况
       Arr=Dic.keys
       ForN=LBound(Arr)ToUBound(Arr)
           Cells((NMod65536)+1,N\65536+1)=Arr(N)
       NextN
   Else   '数量少时直接转置
       .[a1].Resize(Dic.Count,1)=Application.Transpose(Dic.keys)   '转置字典的keys值
   EndIf
EndWith
SetDic=Nothing  '清空字典项目
EndSub

文章介绍到“随机生成姓名”excel源附件可以在论坛下载,地址是:http://www.blwbbs.com/forum.php?mod=viewthread&tid=13111

点赞 0
反对 0
举报
收藏 0
打赏 0
评论 0
分享 7
更多相关评论
暂时没有评论,来说点什么吧
SUM函数从易到难实战交流
SUM函数使用共分为四大类:简单求和,生成序列,文本计数求和,数组扩展求和。

0评论2024-03-24571

工程项目经济评价的基本方法
投资项目评价的经济指标一般可以分作三大类:第一类是以时间单位计量的时间型指标,如投资回收期;第二类是以货币单位计量的价值

0评论2022-04-172130

EXCEL统计字符出现次数的方法
我们已经知道使用简单的公式=COUNTIF或=COUNTIFS,来统计单元格区域某个值的出现次数,那么针对同一单元格,如何统计某字符串的

0评论2020-11-242263

计算机二级考试题库之Excel选择题(七)
在Excel中,要显示公式与单元格之间的关系,可通过以下方式实现

0评论2020-11-202222

计算机二级考试题库之Excel选择题(六)
继续我们的计算机二级office题库练习,今天开始是Excel软件的选择题。今天的第11道和第12道题目。

0评论2020-11-202391

计算机二级考试题库之Excel选择题(五)
继续我们的计算机二级office题库练习,今天开始是Excel软件的选择题。今天的第9道和第10道题目。第9题:以下错误的Excel公式形式

0评论2020-11-201758

计算机二级考试题库之Excel选择题(四)
继续我们的计算机二级office题库练习,今天开始是Excel软件的选择题。今天的第7道和第8道题目。第7题:小刘用Excel 2010制作了一

0评论2020-11-201125

计算机二级考试题库之Excel选择题(三)
继续我们的计算机二级office题库练习,今天开始是Excel软件的选择题。今天的第5道和第6道题目。第5题:在Excel某列单元格中,快

0评论2020-11-201129

计算机二级考试题库之Excel选择题(二)
继续我们的计算机二级office题库练习,今天开始是Excel软件的选择题。今天的第3道和第4道题目。第3题:小金从网站上查到了最近一

0评论2020-11-202069

计算机二级考试题库之Excel选择题(一)
继续我们的计算机二级office题库练习,今天开始是Excel软件的选择题。今天的第1道和第2道题目。第1题:在Excel工作表中存放了第

0评论2020-11-202363