ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-3-8 18:16 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 yjh_27 于 2020-3-8 18:24 编辑
lumou 发表于 2020-3-8 16:21
试了试,您可能错误理解我的意思了。
我说的是运算后列出结果之差小于指定误差的所有算式,不是指单个运 ...

你把13、 17句注释掉,就是全部。 共29304个
再筛选。

或把13句改为你认为正确的判断。

你的要求没有全明白。是第1个组合与其他所有组合比,差值小的保留;然后第2个。。。。。

看了27L 明白了。
你把13、 17句注释掉,就是全部。 共29304个,和值排序,在筛选。

TA的精华主题

TA的得分主题

发表于 2020-3-8 19:04 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
18105参见附件

其他组合自行修改(减少循环层)

数列组合计算.rar

30.6 KB, 下载次数: 5

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-8 19:36 | 显示全部楼层
yjh_27 发表于 2020-3-8 19:04
18105参见附件

其他组合自行修改(减少循环层)

非常感谢,代码非常简洁。
运行了一下,发现9个数据的组合18058个。手动去除重复数据实在是太难了
后面还有许多数据要处理,有的数列是20多个数据
能有啥办法把重复的去掉吗?
再次感谢

TA的精华主题

TA的得分主题

发表于 2020-3-8 20:12 | 显示全部楼层
lumou 发表于 2020-3-8 19:36
非常感谢,代码非常简洁。
运行了一下,发现9个数据的组合18058个。手动去除重复数据实在是太难了
...

不重复2496个,替换循环代码
  1. For a = 1 To m
  2. For B = a To m
  3. For c = B To m
  4. For d = 1 To m
  5. For e = d To m
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-8 20:23 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
yjh_27 发表于 2020-3-8 20:12
不重复2496个,替换循环代码

非常感谢,代码改了后运算了一下,共有2478个组合,
是我哪里没有改过来吗?

TA的精华主题

TA的得分主题

发表于 2020-3-8 20:42 | 显示全部楼层
lumou 发表于 2020-3-8 20:23
非常感谢,代码改了后运算了一下,共有2478个组合,
是我哪里没有改过来吗?

我的是sci值,含空行。
你的应该是不含空行。

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-8 20:50 | 显示全部楼层
yjh_27 发表于 2020-3-8 20:42
我的是sci值,含空行。
你的应该是不含空行。

原来如此,非常感谢!

TA的精华主题

TA的得分主题

发表于 2020-3-8 21:12 | 显示全部楼层
看来确实是难题,这么久了还没解决吗??

有一点需要解释一下,规则是如何处理的。

假设:得出的计算式结果有: 10,10.2,10.5,10.8,10.9,11,11.1

这时候,10,10.2,10.5,10.8,10.9这些数字误差在0.9以内,那么这些数值对应的计算式可以作为一组结果;
但是,10.2,10.5,10.8,10.9,11,11.1这些数字的误差也是在0.9以内,那么这些数字对应的计算式是不是可以作为又一组结果???如果可以,那么相当于10.2,10.5,10.8,10.9,11这几个数字对应的计算式参与组合了两次,

如果后面还有11.3 ,那么10.5,10.8,10.9,11,11.1这些数字对应的计算式,又会重复组合一次,这样累计下去,组合数是比较多的。

TA的精华主题

TA的得分主题

发表于 2020-3-8 21:36 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
简单列了一下A+B的组合,只有5组符合误差的组合,其中一组是3个计算式,另外4个是两个计算式,
image.png

这是计算式不允许循环组合的情况。如果允许循环组合,那

image.png

这样的组合,可以分解为4种组合,前两个一组,后两个一组,第一个和第三个一组,全部三个算式为一组。

所以这样看来,如果有一些数据值比较接近,计算式的结果可能会有很多个相似的值,而这些值组合在一起会有很多种。

这样看来,规则还需要加一个,同一个算式,只组合一次,这样求结果可能还好一点。否则数据多了结果太庞大了。

TA的精华主题

TA的得分主题

发表于 2020-3-9 12:35 | 显示全部楼层
本帖最后由 micch 于 2020-3-9 12:39 编辑

image.png

对错还不知道,代码简单写的,没检查逻辑,也没法验证。

第5组合的结果相近的值太多了,如果每个组合打乱重新组合,那结果是无穷多的结果,列出来根本无法查看。

以图片为例,第一组有23个计算式,这23个打乱组合就是很多。然后第一组去掉0.2的计算式,剩下的和第二组的1.2的计算式,这些式子完全可以组合在一起成为新的一个组合,而这个新的组合打乱重新组合又是一堆组合。

这样循环组合,得出的结果,Excel是肯定放不下了,100万多行而已根本不够。

规则没有漏洞,代码才能写出来,如果规则不清晰,完全不知道如何写代码,简单排列组合,列出来到是简单。问题是得出的结果还要根据误差再组合,这个组合规则不清楚
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 07:34 , Processed in 0.042993 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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