ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求助大佬,如何用vba生成制定总和的随机数

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-28 11:14 | 显示全部楼层
grf1973 发表于 2024-4-28 11:04
这点小事不需要。

我看我的积分发私信和添加好友都受限

TA的精华主题

TA的得分主题

发表于 2024-4-28 12:52 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
随机分组.zip (18.49 KB, 下载次数: 17)


参考!

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-28 16:12 | 显示全部楼层

感谢大佬的鼎力支持,我先学习下,又不懂的在跟您请教

TA的精华主题

TA的得分主题

发表于 2024-4-28 20:35 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-4-28 21:06 | 显示全部楼层
从设计思路上,你能实现随机n个数字在指定范围内,并且满足和值是目标值。那么就可以把问题分解成一个个的子问题,子问题解决了,总的问题就解决了

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-29 01:13 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
gwjkkkkk 发表于 2024-4-28 20:35
每份的数量应该是不等的吧。。。

对的,每份的数量是随机的,但是有空行分隔或者有白夜班的转换,所以应该能提取出每个块的数量

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-29 01:14 | 显示全部楼层
micch 发表于 2024-4-28 21:06
从设计思路上,你能实现随机n个数字在指定范围内,并且满足和值是目标值。那么就可以把问题分解成一个个的 ...

一开始没想到用什么方式去解决随机数求和的问题,看到大佬的方法就是取不到满意的值调回去重现随机,这一下立马豁然开朗了,感谢大佬的指点

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-29 18:43 | 显示全部楼层

大佬,膜拜,学习了两天,又有了新收获,思路果然不一样,强!

TA的精华主题

TA的得分主题

发表于 2024-4-29 22:02 | 显示全部楼层
类似grf1973大大的办法,只是有一点改动:
只是完整 一点点外,如果每组求随机数不多时,一点优势也没有,改for中的i也是不可取的。
Sub 宏1()
    n_time = 6
    sum_rnd = 2.12
    rnd_max = 0.6
    rnd_min = 0.2
    ReDim arr(1 To n_time)
    For i = n_time To 1 Step -1
      If (i * rnd_max < sum_rnd) Or (i * rnd_min > sum_rnd) Then
         If i = n_time Then
            MsgBox ("条件不合理,不会有结果产生!")
            Exit Sub
         Else
            i = i + 1
            sum_rnd = sum_rnd + arr(i)
            arr(i) = 0
         End If
      End If
      If i = 1 Then
         arr(i) = sum_rnd
      Else
         arr(i) = Application.WorksheetFunction.RandBetween(rnd_min * 100, rnd_max * 100) / 100
         sum_rnd = sum_rnd - arr(i)
      End If
    Next
    ii = 0
    showstr = ""
    For i = 1 To n_time
        ii = ii + arr(i)
        If i = 1 Then
            showstr = "" & arr(i)
        Else
            showstr = showstr & "+" & arr(i)
            If i = 6 Then showstr = showstr & "=" & ii
        End If
    Next
    MsgBox (showstr)
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-12 05:27 , Processed in 0.033452 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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