广告合作
  • 今日头条

    今日头条

  • 百度一下

    百度一下,你就知道

  • 新浪网

    新浪网 - 提供新闻线索,重大新闻爆料

  • 搜狐

    搜狐

  • 豆瓣

    豆瓣

  • 百度贴吧

    百度贴吧——全球领先的中文社区

  • 首页 尚未审核订阅工具 订阅

    Excel指定文本按指定次数随机排序显示

    来源:网络收集  点击:  时间:2024-03-11
    【导读】:
    修法布施得聪明智慧,多分享让生活更美好。工作中有时需要使用随机数,Excel内置了大于等于 0 及小于 1 的均匀分布随机实数的随机函数RAND和两个指定数之间的一个随机数的随机函数RANDBETWEEN,但这些随机到整数有重复出现,要不重复处理很复杂,不利我们工作中利用,下面通过一个实例方便处理出现不重复的随机数,同时通这实例可应用很多随机实例中,比如抽奖,学生抽签学位,指定概率随机数等。工具/原料moreMicrosoft Office Excel 2007Excel VBA实例问题1/1分步阅读

    如图,在D列中,要把B列廊脂里的文本按C列中的次数生成,同时生成的顺序是随机的比如案例里“18基本”要在D列出现5次,“伐陕科18舒适”要8次,“18豪华”要10次,“13基本”边畜要7次。即D列要出现30个名称,但是“18基本”、“18舒适”、“18豪华”、13基本”要随机生成。

    解题思路1/1

    B1:C6放在一组数mb(名称,数量)中,根据C列总计出有30个名称,每个名称个数生成按序号1,2,3,…,30对应名称的数组mn(序号,名称),然后随机生成1到30的随机数,然后按这些随机数查找mn(序号,名称),生成mm(随机序号,名称)数组随机名称。

    处理方法/步骤1/5

    首先打开上例文件,如下图。

    2/5

    然后按下快捷键ALT+F11打开VBA(宏)编辑界面,然后点菜单栏【插入】下拉中列表中点【模块(M)】如图。

    3/5

    然后插入了一个模块1,在代码框中复制如下代码:

    Option Base 1

    Sub 文本次数随机显示()

    2020-5-7 22:32:18

    Dim i As Long, j As Long, k As Long, n As Long, mb, mn(), mm(), rn As Long

    mb = Range(Range(b3), Range(c Range(b Rows.Count).End(xlUp).Row))

    n = Application.WorksheetFunction.Sum(Application.WorksheetFunction.Index(mb, 0, 2))

    k = 0

    ReDim mn(n, 2)

    For i = 1 To UBound(mb, 1)

    For j = 1 To mb(i, 2)

    k = k + 1

    mn(k, 1) = k

    mn(k, 2) = mb(i, 1)

    Next j

    Next i

    Erase mb

    ReDim mm(n, 2)

    Randomize

    For i = 1 To n

    rn = Int((n * Rnd) + 1)

    If i = 1 Then

    mm(i, 1) = rn

    mm(i, 2) = Application.WorksheetFunction.VLookup(rn, mn, 2, False)

    Else

    k = i

    For j = 1 To i - 1

    If mm(j, 1) = rn Then i = i - 1: Exit For

    Next j

    If k = i Then

    mm(i, 1) = rn

    mm(i, 2) = Application.WorksheetFunction.VLookup(rn, mn, 2, False)

    End If

    End If

    Next i

    Range(d3).Resize(n, 1) = Application.WorksheetFunction.Index(mm, 0, 2)

    End Sub

    4/5

    以上操作动态过程如下:

    5/5

    回到工作表窗口,首先选原数据表,然后运行【文本次数随机显示】宏(菜单栏中点【视图】中下列表中【宏】列表【查看宏(V)】打开宏对方框,选该宏名),输出结果,运行过程如下图。

    万能式随机显示1/3

    下面修改下代码,做成万能式随机显示,选原数据(不含标题两列,后列必须是 数字),然后运行宏得到随机排列,代码如下:

    Sub 选数据随机显示()

    2020-5-7 22:32:18

    Dim i As Long, j As Long, k As Long, n As Long, mb, mn(), rn As Long, myr As Range

    mb = Selection

    n = Application.WorksheetFunction.Sum(Application.WorksheetFunction.Index(mb, 0, 2))

    k = 0

    ReDim mn(n, 2)

    For i = 1 To UBound(mb, 1)

    For j = 1 To mb(i, 2)

    k = k + 1

    mn(k, 1) = k

    mn(k, 2) = mb(i, 1)

    Next j

    Next i

    Erase mb

    Randomize

    On Error Resume Next

    With CreateObject(scripting.dictionary)

    For i = 1 To n

    rn = Int((n * Rnd) + 1)

    .Add rn, Application.WorksheetFunction.VLookup(rn, mn, 2, False)

    If Err.Number 0 Then

    i = i - 1

    End If

    Err.Clear

    Next i

    Set myr = Application.InputBox(prompt:=选择输出随机数据一个单元格, Type:=8)

    myr.Resize(.Count, 1) = Application.WorksheetFunction.Transpose(.items)

    End With

    End Sub

    2/3

    回到工作表窗口,首先选原数据表,然后运行【选数据随机显示】宏(菜单栏中点【视图】中下列表中【宏】列表【查看宏(V)】打开宏对方框,选该宏名),提示“选择输出随机数据一个单元格”,选好后输出结果,运行过程如下图。

    3/3

    如果觉得这篇经验帮到了您,请点击下方的 “投票点赞 或者“收藏”支持我!还有疑问的话可以点击下方的 “我有疑问”,谢谢啦!

    注意事项

    动态图片要双击成单独大图才能播放全过程。

    两个宏代码里不同处理不重复数字,前者是数组处理,后者用到字典对象处理。后者比前者速度快,如果数据量大,要用后者,否要等很久。

    本文关键词:

    版权声明:

    1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。

    2、本站仅提供信息发布平台,不承担相关法律责任。

    3、若侵犯您的版权或隐私,请联系本站管理员删除。

    4、文章链接:http://www.1haoku.cn/art_323044.html

    相关资讯

    ©2019-2020 http://www.1haoku.cn/ 国ICP备20009186号05-06 08:41:39  耗时:0.026
    0.026s