ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] 小女子感谢一把小刀闯天下老师的秒杀,本帖结题了!怎样从一个数组中随机抽出40个

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-12-1 07:37 | 显示全部楼层 |阅读模式
本帖最后由 dldjli 于 2018-12-1 08:36 编辑

小女子求教各位大侠:怎样从一个102个元素的数组中随机抽出40个不同元素放置到相隔的两块区域中。如:
  A列为原始数据,使用VBA定义数组sj,并把单元格A2至A103中的102个数据赋予sj,数组sj拥有了102个元素。如下:
Sub 随机()
Dim sj
sj = ["b2:b103"]

End Sub
     小女子求教各位大侠的问题是:怎样把程序中添加语句,每次点击“随机”按钮后,程序能够在数组sj中随机抽取40个不重复的元素,其中20个元素放置于区域C18:L19中,另20个元素放置于C21:L22中(蓝字部分,内有一次模拟效果)。
  详细说明:㈠从sj拥有了102个元素中随机抽取40个;㈡40个被抽中的元素之间不会重复相同;㈢以20个为限,分别放置于两个区域。㈣下面有3次模拟效果,由于随机抽取,点击“随机”按钮实际出现的效果可能有部分元素相同,但与模拟效果完全相同的可能性基本上为0,其概率为1/PERMUT(102,40)=1/3.05512389079056E+76。
  小女子拜谢各位大侠了!
附件如右: 小女子求教各位大侠:怎样从一个102个元素的数组中随机抽出40个不同元素放置到相隔的.rar (20.68 KB, 下载次数: 24)
附图如下:
小女子求教各位大侠:怎样从一个102个元素的数组中随机抽出40个不同元素放置到相隔的.jpg

TA的精华主题

TA的得分主题

发表于 2018-12-1 08:20 | 显示全部楼层
Option Explicit

Sub 随机()
  Dim arr, i, j, m, n, t, a
  arr = [a2:a103]
  ReDim brr(1 To 5, 1 To 10) As String
  Randomize
  For i = 1 To 40
    a = Int(Rnd * (UBound(arr, 1) - i + 1)) + i
    t = arr(i, 1): arr(i, 1) = arr(a, 1): arr(a, 1) = t
    n = n + 1: brr(m + 1, n) = arr(i, 1)
    If n = UBound(brr, 2) Then
      m = m + 1: n = 0
      If m = 2 Then m = m + 1
    End If
  Next
  [c18].Resize(UBound(brr, 1), UBound(brr, 2)) = brr
End Sub

评分

3

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-1 08:33 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

一把小刀闯天下老师,小女子感谢您对难题的秒杀!

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-1 10:01 | 显示全部楼层
本帖最后由 dldjli 于 2018-12-1 10:21 编辑

一把小刀闯天下老师,您给出的程序小女子正在学习之中,先求教其中的两个问题:
  1、通过arr = [a2:a103],那么,arr 不是一维数组吗?为求其最大索引号时不用UBound(arr) 而用UBound(arr, 1)?
  2、通过(UBound(arr, 1) - i + 1)把索引号每次都减1,通过Int(Rnd * (UBound(arr, 1) - i + 1)) + i的随机后再加回,岂不是随机数的基底在递增,这是什么原理?这样会不会改变数据随机性的秩序?这与直接用Int(Rnd * UBound(arr)) 有何区别?
  还需要老师有空闲时您教导一下您在设计程序时的随机原理。
  小女子不懂,各位大侠如有空闲时间也请指教!

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-12-1 13:40 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
dldjli 发表于 2018-12-1 10:01
一把小刀闯天下老师,您给出的程序小女子正在学习之中,先求教其中的两个问题:
  1、通过arr = [a2: ...

刚注意到:

1、没错,写法不同而已,ubound(arr)没有问题,而且是习惯写法。如果是一个大于一维的数组最好写上去,比如是三维数组,ubound(arr,1)、ubound(arr,2)、ubound(arr,3),分别代表一、二、三维的上标,这样就不会搞错,因为有时一个问题的代码量会很大,,,
2、如果整个数组作乱序效率等同,但仅取一部分随机数这个效率更高,取的数越少效率越高。自己单步观察一下就知道了,,,

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-1 14:16 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
一把小刀闯天下 发表于 2018-12-1 13:40
刚注意到:

1、没错,写法不同而已,ubound(arr)没有问题,而且是习惯写法。如果是一个大于一维的数组 ...

感谢老师的帮助,佩服老师的高水平,为了学习一些知识,建立一套模拟情景不容易,能得到高师的指点更为不易,目前仍在学习老师的程序之中。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-12-1 14:41 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
function make_password( $length = 8 )
{
    // 密码字符集,可任意添加你需要的字符
    $chars = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
    'i', 'j', 'k', 'l','m', 'n', 'o', 'p', 'q', 'r', 's',
    't', 'u', 'v', 'w', 'x', 'y','z', 'A', 'B', 'C', 'D',
    'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L','M', 'N', 'O',
    'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y','Z',
    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '!',
    '@','#', '$', '%', '^', '&', '*', '(', ')', '-', '_',
    '[', ']', '{', '}', '<', '>', '~', '`', '+', '=', ',',
    '.', ';', ':', '/', '?', '|');
    // 在 $chars 中随机取 $length 个数组元素键名
    $keys = array_rand($chars, $length);
    $password = '';
    for($i = 0; $i < $length; $i++)
    {
        // 将 $length 个数组元素连接成字符串
        $password .= $chars[$keys[$i]];
    }
    return $password;
}

这种如果php就一个 arr_rand函数就行了
https://blog.csdn.net/qq_35349114/article/details/76154765

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-12-1 20:33 | 显示全部楼层
本帖最后由 yjh_27 于 2018-12-1 23:31 编辑

m随机取n自定义函数,重复与否可选

m个元素的数组中随机抽出n个元素.rar

26.05 KB, 下载次数: 8

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-2 06:13 | 显示全部楼层
zpy2 发表于 2018-12-1 14:41
function make_password( $length = 8 )
{
    // 密码字符集,可任意添加你需要的字符

zpy2老师,感谢您为小女子高水平的指导,小女子正在学习之中。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-2 06:18 | 显示全部楼层
本帖最后由 dldjli 于 2018-12-2 06:25 编辑
yjh_27 发表于 2018-12-1 20:33
m随机取n自定义函数,重复与否可选

yjh_27老师,您不止于高水平的制作,更是教师讲授中的侠者,您在VBA中的解读,让小女子省去不少揣摩的精力,而精心于体会老师的思想所在,小女子在程序中有什么问题还会向yjh_27请教的,学习好您教导的程序才能最大程度上对得起您的良苦用心。

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-5-16 04:01 , Processed in 0.050481 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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