Excel精英培训网

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

[已解决]VBA 循环计算的方法

[复制链接]
发表于 2017-7-20 20:32 | 显示全部楼层 |阅读模式
本帖最后由 wslnjut 于 2017-7-20 20:33 编辑

   工作中用到的计算管道压力的问题:
    1、想一小段、一小段 计算管道压力,因整体计算,压降不准。管子规格如【A1】和【A2】列所示。(见附件)
     2、当管子为【水平】时,假设公式为【 P=长度 L/管径 D】
        当管子为【垂直】时,假设公式为【 P=长度 L*2/管径 D】
        当管子为【弯头】时,假设公式为【 P=管径 D * 管径 D】
      
     3、当在上面【绿色框】里输入长度L时,自动计算出其压力,举例:
       当在【E3】里输入7,则7要被分成四部分计算:单元格【B1】+【B2】+【B3】+【B4的一部分】=5+1+0+1,
        此时【B4】被拆分成【1+4】,其中长度1的管径为50, 长度4的管径可能为80
     4、计算步骤:
        【管径为50,长度7:】
              P1=5/50  P2=1/50  P3=50*50  P4=1*2/50
               P总1=P1+P2+P3+P4 ,此时【B4】的值还剩4,在下面的计算中代入
        【管径为80,长度3:】
              P1=3*2/80
               P总2=P1    ,此时【B4】的值还剩1,在下面的计算中代入
        【管径为100,】
              ..........
         【管径为400,】

    P总=P总1 + P总2 + P总3 + P总4 + P总5 +......+ P总10

用VBA 的方法 ,有没有什么好方法,谢谢大家~~~~~~~
最佳答案
2017-7-21 11:15
附件也给你,注意由于系统版本关系,管道种类名用第一个汉字的拼音代替了。
结果输出在E5单元格,已验证结果正确。
计算问题.jpg

循环计算问题.zip

20.1 KB, 下载次数: 7

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2017-7-20 21:36 | 显示全部楼层
請教
第一,管子规格如【A1】和【A2】列,A2是不是筆誤
第二、长度4的管径可能为80,"可能"表示甚麼意思,那又有可能是哪一種管徑
第三、計算步驟請在進一步說明,看不是很懂(很抱歉,真的不容易董您的意思,雖然我也學過流體力學)
回复

使用道具 举报

发表于 2017-7-20 21:49 | 显示全部楼层
本帖最后由 砂海 于 2017-7-20 22:09 编辑

函数思路 , 修改了.你的问题 别人全靠猜.

管道2.rar (23.72 KB, 下载次数: 6)
回复

使用道具 举报

 楼主| 发表于 2017-7-21 09:19 | 显示全部楼层
本帖最后由 wslnjut 于 2017-7-21 09:20 编辑
idnoidno 发表于 2017-7-20 21:36
請教
第一,管子规格如【A1】和【A2】列,A2是不是筆誤
第二、长度4的管径可能为80,"可能"表示甚麼意思 ...


請教
第一,管子规格如【A1】和【A2】列,A2是不是筆誤
      回复:是笔误,是【A】列和【B】列
第二、长度4的管径可能为80,"可能"表示甚麼意思,那又有可能是哪一種管徑
    回复:见图片1
第三、計算步驟請在進一步說明,看不是很懂(很抱歉,真的不容易董您的意思,雖然我也學過流體力學)
  回复:我这个是气-固两相流,所以计算思路 和一般的 流体力学不太一样;大概的意思是:
             1、有一段长管子(见图片2),你不确定其管径,但是知道其长度,但你需要控制流速,在流速快的地方需要变径
             2、需要把管子拆分成<5m一段计算,表格中已经拆好了
             2、见图片1,【E3】单元格我输入一个长度 7m,这个7m的管子包含了水平管、弯头、和垂直管, 每一种类型                的管子的计算方法不一样。

            

CatchD886.jpg
QQ图片20170721091545.jpg
回复

使用道具 举报

 楼主| 发表于 2017-7-21 09:19 | 显示全部楼层
砂海 发表于 2017-7-20 21:49
函数思路 , 修改了.你的问题 别人全靠猜.

感谢,辛苦了····{:091:}
回复

使用道具 举报

发表于 2017-7-21 09:20 | 显示全部楼层
P3=50*50,难道弯头不用考虑数量吗,这个数量是0,就是没用弯头,为什么也要加上去。
回复

使用道具 举报

 楼主| 发表于 2017-7-21 09:33 | 显示全部楼层
大灰狼1976 发表于 2017-7-21 09:20
P3=50*50,难道弯头不用考虑数量吗,这个数量是0,就是没用弯头,为什么也要加上去。

这个只是假设的公式,实际要复杂。 但是 弯头和长度没有关系,只和管径有关系。这里用 0表示,只是便于区分。
回复

使用道具 举报

 楼主| 发表于 2017-7-21 09:34 | 显示全部楼层
wslnjut 发表于 2017-7-21 09:33
这个只是假设的公式,实际要复杂。 但是 弯头和长度没有关系,只和管径有关系。这里用 0表示,只是便于区 ...

有一个0 表示就有一个弯头
回复

使用道具 举报

发表于 2017-7-21 11:11 | 显示全部楼层
  1. Sub aaa()
  2. Dim arr, brr, i&, j&, n&, n1&, r&, p#, b As Boolean
  3. arr = [a1].CurrentRegion
  4. brr = [D2].CurrentRegion
  5. r = 1
  6. For j = 2 To UBound(brr, 2)
  7.   b = False
  8.   n = 0
  9.   For i = r To UBound(arr)
  10.     If arr(i, 1) = "弯头" Then
  11.       p = p + brr(1, j) ^ 2
  12.     Else
  13.       If n + arr(i, 2) < brr(2, j) Then
  14.         n = n + arr(i, 2)
  15.         n1 = arr(i, 2)
  16.       ElseIf n + arr(i, 2) > brr(2, j) Then
  17.         n1 = brr(2, j) - n
  18.         n = n + n1
  19.         arr(i, 2) = arr(i, 2) - n1
  20.         r = i
  21.         b = True
  22.       Else
  23.         n1 = arr(i, 2)
  24.         r = i + 1
  25.         b = True
  26.       End If
  27.       If arr(i, 1) = "水平" Then p = p + n1 / brr(1, j) Else p = p + n1 * 2 / brr(1, j)
  28.       If b = True Then Exit For
  29.     End If
  30.   Next i
  31. Next j
  32. [e5] = p
  33. End Sub
复制代码
回复

使用道具 举报

发表于 2017-7-21 11:15 | 显示全部楼层    本楼为最佳答案   
附件也给你,注意由于系统版本关系,管道种类名用第一个汉字的拼音代替了。
结果输出在E5单元格,已验证结果正确。

test.zip

17.73 KB, 下载次数: 5

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-16 13:28 , Processed in 0.335394 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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