ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: LMY123

[求助] 【已完美解决】根据多种条件,生成随机不重复数

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-4-14 13:12 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
LMY123 发表于 2013-4-14 13:00
多谢大师指导,确实太强大了

5楼附件有更新……增加了乱序输出,或按从小到大顺序输出的两种变化。

请重新下载附件。

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-4-14 13:14 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
香川群子 发表于 2013-4-14 13:08
呵呵,我不谦虚地说,这个是目前论坛里最好的随机取值实际应用代码。

多谢大师,只是有一点不明白,这么强大的代码是人写的,还是借助工具产生的?

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-4-14 13:20 | 显示全部楼层
香川群子 发表于 2013-4-14 13:12
5楼附件有更新……增加了乱序输出,或按从小到大顺序输出的两种变化。

请重新下载附件。

多谢大师抽出宝贵的时间对我们进行耐心讲解,细心指导

TA的精华主题

TA的得分主题

发表于 2013-4-14 13:21 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
补充2:

最小间隔指定以后,是和指定小数位数直接相关联,并自动换算的,
不需要在指定时换算。

如:
1. 指定小数位数=0时,那么最小间隔h=1就是=1,h=5就是=5
2. 指定小数位数=2时,那么最小间隔h=1的含义就是间隔=0.01,h=5就是间隔=0.05 → 即自动按指定小数位换算成最小间隔
3. 指定小数位数=-1时,那么最小间隔h=1的含义就是间隔=10,h=5就是间隔=50 → 即自动按指定小数位换算成最小间隔



TA的精华主题

TA的得分主题

 楼主| 发表于 2013-4-14 13:26 | 显示全部楼层
香川群子 发表于 2013-4-14 13:21
补充2:

最小间隔指定以后,是和指定小数位数直接相关联,并自动换算的,

多谢大师再次指导,在学习消化大师代码的过程中,有不懂的,还希望得到大师的帮助和指导

TA的精华主题

TA的得分主题

发表于 2013-4-14 13:26 | 显示全部楼层
LMY123 发表于 2013-4-14 13:14
多谢大师,只是有一点不明白,这么强大的代码是人写的,还是借助工具产生的?

工具?

在IT行,人脑也是工具的一种。



TA的精华主题

TA的得分主题

 楼主| 发表于 2013-4-14 13:33 | 显示全部楼层
香川群子 发表于 2013-4-14 13:26
工具?

在IT行,人脑也是工具的一种。

多谢大师指教,明白了,最强的代码都是人想出来的

TA的精华主题

TA的得分主题

发表于 2013-4-14 14:16 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
这个问题有点特别,练习一下:
Sub test()
Dim ar(), br(), min, max, n, i&, s, t1
min = [a2].Value * 100
max = [b2].Value * 100
s = max - min + 1
n = [c2].Value
ReDim br(1 To Int((n - 1) / 3) + 1, 1 To 3)
ReDim ar(1 To s, 1 To 1)
For i = 1 To s
    ar(i, 1) = (i + min - 1) / 100
Next i
For i = 1 To n
    t1 = Int(Rnd() * (s - i + 1)) + i
    br(Int((i - 1) / 3) + 1, ((i - 1) Mod 3) + 1) = ar(t1, 1)
    ar(t1, 1) = ar(i, 1)
Next i
[a3].Resize(Int((n - 1) / 3) + 1, 3) = br
End Sub

点评

数组行列转换计算时,直接定义下标从【0】开始可以明显地简化计算!  发表于 2013-4-14 19:45

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-4-14 15:16 | 显示全部楼层
小花鹿 发表于 2013-4-14 14:16
这个问题有点特别,练习一下:
Sub test()
Dim ar(), br(), min, max, n, i&, s, t1

多谢大师指导,经测试 ,效果非常好

TA的精华主题

TA的得分主题

发表于 2013-4-14 19:44 | 显示全部楼层
小花鹿 发表于 2013-4-14 14:16
这个问题有点特别,练习一下:
Sub test()
Dim ar(), br(), min, max, n, i&, s, t1

呵呵,代码写得不错……


我的代码实际上复杂了。
原因在于,当时考虑,直接定义数组 1 to s 时,会有如下问题:
如果s值很大,比如 几万亿……那么定义数组会占用很多内存……甚至超出极限而无法定义。

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

本版积分规则

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

GMT+8, 2024-11-18 11:22 , Processed in 0.036136 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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