ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求助大神棘手难题:数列组合运算,找出数列中运算结果小于误差的所有组合。

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-3-8 14:46 | 显示全部楼层
lumou 发表于 2020-3-8 14:08
需要误差以内的

组合5,130个结果
  1. Sub zhee()
  2. arr = [a5:b13]
  3. bz = [b2]
  4. ReDim scrr(1 To 10000, 1 To 2)
  5. m = UBound(arr)
  6. For a = 1 To m
  7. For b = 1 To m
  8. For c = 1 To m
  9. For d = 1 To m
  10. For e = 1 To m
  11.     If d <> a And d <> b And d <> c And e <> a And e <> b And e <> c Then
  12.     hj = arr(a, 2) + arr(b, 2) + arr(c, 2) - arr(d, 2) - arr(e, 2)
  13.     If hj >= 0 And hj <= bz Then
  14.         i = i + 1
  15.         scrr(i, 1) = arr(a, 1) & " + " & arr(b, 1) & " + " & arr(c, 1) & " - " & arr(d, 1) & " - " & arr(e, 1)
  16.         scrr(i, 2) = hj
  17.     End If
  18.     End If
  19. Next e, d, c, b, a
  20. Range("k5").Resize(i, 2) = scrr
  21. End Sub
复制代码


其他自己改。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-8 15:53 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
一把小刀闯天下 发表于 2020-3-8 14:24
晕,判断条件错了,因为输出数据量太多也没检查,自己再试试
-----------
If k - j > 2 Then 改成

非常感谢,已经不重复取值后的计算问题已经解决了。
但重复取值的问题好像还是不行,比如附件中x6+x6与x7+x2差值在误差以内,但没有列出来,之前没去重和后面去重的都试了,好像都没列出来,这个该怎么解决啊。
再次感谢

数列组合计算--去重.rar

20.62 KB, 下载次数: 2

TA的精华主题

TA的得分主题

发表于 2020-3-8 16:06 | 显示全部楼层
因为你的源数据为X1-X9,就是9个数据按你的条件来组合,你这条件其实就是9个数可以带符号进行组合。当然+X1-X1属于无效组合,前面就是把这些给去除了。如果你的X6+X6与x7+x2算为一组,那么假设X6+...+X6与x7+x2也算为一组,这结果可能是无限的,问题就变复杂了。先看看别人的建议吧,,,

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-8 16:08 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
yjh_27 发表于 2020-3-8 14:46
组合5,130个结果

非常感谢,我试试。

TA的精华主题

TA的得分主题

发表于 2020-3-8 16:19 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
lumou 发表于 2020-3-8 15:53
非常感谢,已经不重复取值后的计算问题已经解决了。
但重复取值的问题好像还是不行,比如附件中x6+x6与x ...

给你举个实例吧

假设X1=10^-8,X2=1

那么10^8个X1的和=X2,这只是相等,如果偏差为0.9那结果将是非常非常多的,所以这种结果就变得毫无意义了,而且计算量也是非常巨大的,,,

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-8 16:21 | 显示全部楼层
yjh_27 发表于 2020-3-8 14:46
组合5,130个结果

试了试,您可能错误理解我的意思了。
我说的是运算后列出结果之差小于指定误差的所有算式,不是指单个运算式的结果小于误差。

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-8 16:25 | 显示全部楼层
一把小刀闯天下 发表于 2020-3-8 16:06
因为你的源数据为X1-X9,就是9个数据按你的条件来组合,你这条件其实就是9个数可以带符号进行组合。当然+X1 ...

感谢回复
每组参与运算的数字个数是固定的,比如2个数组合,肯定只有x6+x6,x7+x2,肯定不会不用把x6+x6+x6这种算进来,这种是3个数组合了。
不知道我的理解对不对

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-8 16:40 | 显示全部楼层
一把小刀闯天下 发表于 2020-3-8 16:19
给你举个实例吧

假设X1=10^-8,X2=1

不是这个意思哦,我这里面总共是5种组合,每种组合参与运算的数字数量是绝对固定的。比如组合1(A+B),最多只能是x1+x2, x1+x1这种,肯定不会是x1+x1+x2, 因为这有3个数字参与运算,属于组合4(A+B+C), 所以x1+x1+x2只能和x2+x4+x6等去比较,因为都属于组合4.
而x1+x1+x2 其实也不用和x1+x1-x放在一起比较,因为前者属于组合4(A+B+C), 而后者属于组合2(A+B-C).  只用每种相同组合的数字放在一起比较,其结果小于误差就行。
例子中只有9个数据,实际运算中不一定只有9个。

不知我说明白没有,再次感谢




1.jpg

数列组合计算.rar

8.82 KB, 下载次数: 0

TA的精华主题

TA的得分主题

发表于 2020-3-8 16:49 | 显示全部楼层
看明白了,就是首先组合个数是确定的,然后数是可以重复的。挺复杂,有符号+可重复数计算没有什么好的想法,不过可以确定计算量是很大的。看看别人的建议吧,应该会有更好的方法的,只是把我给卡住了,,,

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-8 16:55 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
一把小刀闯天下 发表于 2020-3-8 16:49
看明白了,就是首先组合个数是确定的,然后数是可以重复的。挺复杂,有符号+可重复数计算没有什么好的想法 ...

非常感谢,计算量确实不小。
本来应该用SAS,或SPSS来计算的。但水平实在有限。所以想请各路大神用VBA帮帮忙。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 07:28 , Processed in 0.033951 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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