Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3036|回复: 9

如何做一个条件循环计算表?

[复制链接]
发表于 2019-8-30 22:32 | 显示全部楼层 |阅读模式
自己做了一个这样的表格,前面黄色和橙色的格子是需要输入的数据,后面绿色的都是计算结果。但是我要通过最后一个取整求差的值,来判断橙色的Y值是否合适?这就需要将Y值不断变更(每次增加0.001),迭代计算直到满足取整求差的条件(小于0.001),才能找到我需要的Y数值。我知道Excel宏肯定可以做到,但自己不会,网上查了资料,学着做,但是一直都弄不出来,麻烦这里的高人指点或者帮忙弄一下,多谢了!!!


11.JPG 条件循环.rar (8.65 KB, 下载次数: 3)
发表于 2019-8-31 11:01 | 显示全部楼层
本帖最后由 rardge2015 于 2019-8-31 11:02 编辑

黄色单元格,仅仅Y值变动,还是都变动?
怎么变,起点,终点,变动幅度各是多少?符总条件的值应该很多,只取第一个找到的,还是一定范围内都要?
回复

使用道具 举报

 楼主| 发表于 2019-9-2 09:48 | 显示全部楼层
rardge2015 发表于 2019-8-31 11:01
黄色单元格,仅仅Y值变动,还是都变动?
怎么变,起点,终点,变动幅度各是多少?符总条件的值应该很多, ...

迭代运算需要Y值一直变动,每次增加0.001,黄色区域其他值第一次输入后就不需要变了。
起点就是自己第一个输入的值,终点就是找到第一个满足条件的值,需要满足的条件是取整求差后小于0.001。
第一个值找到后,以此值为起点增加0.001,点击按钮重新计算,再找出该值后续满足条件的第二个值。以此类推。
老师,你看我说清楚了吗?

回复

使用道具 举报

发表于 2019-9-2 12:32 | 显示全部楼层
henkl 发表于 2019-9-2 09:48
迭代运算需要Y值一直变动,每次增加0.001,黄色区域其他值第一次输入后就不需要变了。
起点就是自己第一 ...

你源文件的所有公式仍保留,但要把单元格d15改成数字,小数位4位以上,只要满足0.001的精度即可。再将 d17 的公式改成:
=IF(ABS(D15)<D2,"合适","不合适"),因为d15是数字,有可能是负数,需要加一个绝对值转换函数。

然后添加下面的代码:
While Abs(Cells(15, 4)) >= 0.001
   Cells(3, 2) = Cells(3, 2) + 0.001
Wend

这个代码的意思是只要d15的绝对值不小于0.001,就重复循环,每次循环 b3 的值会递增0.001。
要防止无解的情况,这会导致无限循环而不能退出。我随便初始化了几个 b3 的值,好像都能找到结果,需要你来辨别是否会有无解的情况,我是外行不懂这个模型的原理。如果有无解的可能,那还需要考虑计数的问题,比如:
js = 0
While Abs(Cells(15, 4)) >= 0.001
   Cells(3, 2) = Cells(3, 2) + 0.001
   js = js + 1
   If js > 10000 Then    '大于10000次就退出
      Exit Sub
   End If
Wend



回复

使用道具 举报

发表于 2019-9-2 23:13 | 显示全部楼层
4 楼的方法是对的。
我测试了一下,增加了循环结束条件,从大于0的数值开始,直到 Asin()、Acos() 函数出错为止,见附件。

条件循环.zip

22.01 KB, 下载次数: 4

回复

使用道具 举报

发表于 2019-9-6 01:02 | 显示全部楼层
太难了,
回复

使用道具 举报

 楼主| 发表于 2019-9-12 20:25 | 显示全部楼层
hfwufanhf2006 发表于 2019-9-2 12:32
你源文件的所有公式仍保留,但要把单元格d15改成数字,小数位4位以上,只要满足0.001的精度即可。再将 d1 ...

非常感谢您的帮助,只是我对宏程序命令,语法都不懂,这样说了能理解,就是自己做到excel就出问题了。很感谢你哦,你们确实比我考虑得周到,还考虑了误解情况,很棒哦,如果精度提高的话,会无解的,谢谢了哈
回复

使用道具 举报

 楼主| 发表于 2019-9-12 20:34 | 显示全部楼层
rardge2015 发表于 2019-9-2 23:13
4 楼的方法是对的。
我测试了一下,增加了循环结束条件,从大于0的数值开始,直到 Asin()、Acos() 函数出 ...

老师,太感谢你了,这么费心还帮我把程序加在表格里了,我验证了,一点没问题,所有输出值都能满足条件,这下我可以在满足条件的值里面优选更合适的了。还有个问题请教您,Y值区间的上限值,能不能改大些?或者我给出一个Y值范围再计算呢?我看程序上Y值上限就是L1值

2222.JPG
回复

使用道具 举报

发表于 2019-9-12 22:38 | 显示全部楼层
Y值区间的上限值,能不能改大些?

“啮合点夹角”的公式中用到 ASIN(B3/B4) 函数,其实就是 Y / L1。
ASIN() 函数要求 Y / L1 的绝对值 <= 1,所以 Y 值上限受到 L1、L2 的限制。
回复

使用道具 举报

 楼主| 发表于 2019-10-12 21:21 | 显示全部楼层
rardge2015 发表于 2019-9-12 22:38
“啮合点夹角”的公式中用到 ASIN(B3/B4) 函数,其实就是 Y / L1。
ASIN() 函数要求 Y / L1 的绝对值

哦,懂了,Y值根本不可能大于L1,我想了一下实际情况也是这样的,这个区间就是满足条件的所有值了。老师, 谢谢您耐心的解答。
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-27 02:51 , Processed in 0.390108 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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