Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
楼主: xiaoxie2830398

[已解决]有请excel精英里的高手帮我设置一下VBA程序,非常感谢。

  [复制链接]
发表于 2011-11-8 23:35 | 显示全部楼层
本帖最后由 mxg825 于 2011-11-8 23:58 编辑

这那个A列除C列 等于整数 要求不明,未添加


  1. Sub MXG825()
  2. Dim ARR, CRR, R&, X&, Z1!, JZ!
  3. Dim JS1!, JS2!, JS3!
  4. R = Range("B65536").End(xlUp).Row
  5. Application.ScreenUpdating = False
  6. Range("E1:E" & R).ClearContents
  7. ARR = Range("B1").Resize(R, 4)
  8. Range("A4").Copy
  9. Range("C1").Resize(R, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlAdd
  10. Range("C1").Resize(R, 1).Sort Key1:=Range("C1")
  11. CRR = Range("C1:C" & R)
  12. Range("A1").Select
  13. JS1 = [A2]: JS2 = [A4]: JS3 = [A6]
  14. For X = 1 To R
  15.    Z1 = Int(JS1 / (ARR(X, 2) + JS2)) * (ARR(X, 2) + JS2)
  16.    If (JS1 - Z1) <= CRR(1, 1) Then
  17.         ARR(X, 4) = Application.Round((ARR(X, 1) + JS2) / Int(JS1 / (ARR(X, 2) + JS2)) / JS3 * ARR(X, 3), 5)
  18.    Else
  19. 100:
  20.         JZ = Application.Lookup(JS1 - Z1 - 0.00001, CRR)
  21.         Z1 = Z1 + JZ
  22.         If JS1 - Z1 > CRR(1, 1) Then GoTo 100
  23.         ARR(X, 4) = Application.Round(((ARR(X, 1) + JS2) * (ARR(X, 2) + JS2)) / Z1 / JS3 * ARR(X, 3), 5)
  24.    End If
  25. Next
  26. Range("B1").Resize(R, 4) = ARR
  27. Application.ScreenUpdating = True
  28. End Sub
复制代码
动画演示.gif

xiaoxie(mxg825).rar

10.67 KB, 下载次数: 7

回复

使用道具 举报

 楼主| 发表于 2011-11-9 13:13 | 显示全部楼层
mxg825 发表于 2011-11-9 12:56
看看结果对不对?

现在是完全正确了,太好了,困扰我许久的问题终于圆满解决了,我先试用看看,有什么问题再向你请教!
回复

使用道具 举报

发表于 2011-11-9 13:14 | 显示全部楼层    本楼为最佳答案   
本帖最后由 mxg825 于 2011-11-9 13:28 编辑

到50楼下载,,,已经写好了

xiaoxie(mxg825).rar

10.19 KB, 下载次数: 9

评分

参与人数 1 +1 收起 理由
xiaoxie2830398 + 1 很给力!

查看全部评分

回复

使用道具 举报

发表于 2011-11-8 21:09 | 显示全部楼层
本帖最后由 mxg825 于 2011-11-8 21:54 编辑

你看一下附件。。。
暂时用公式 理清关系,是否还有条件没有补充、

结果对了 再写代码!

QQ截图20111108215336.jpg

xiaoxie2830398.rar

2.79 KB, 下载次数: 0

回复

使用道具 举报

发表于 2011-11-8 20:59 | 显示全部楼层
基本就是这两种情况了,现在还有一个特殊的地方是:如果A列中的数值,除以C列中的数值,商刚好是整数的情况,这时应该把商-1后,再利用上面的两种方法计算。现在这样子说各位大侠应该清楚了我的意图了吧?

要不要加上0.125

回复

使用道具 举报

 楼主| 发表于 2011-11-9 12:00 | 显示全部楼层
mxg825 发表于 2011-11-9 11:50
还有最后的一个问题,还没解决:也要加上0.125算的

请举例说明!

比如A列的数值是60,C列的数值是19.875,那计算时是60/(19.875+0.125)=3,刚好商是整数的,这时要把商-1后,再利用上面的算法计算。

点评

是第二步 时处理,第三步 时怎么处理?  发表于 2011-11-9 12:08
结果等3 时 减1 等于2?  发表于 2011-11-9 12:05
回复

使用道具 举报

 楼主| 发表于 2011-11-7 21:43 | 显示全部楼层
不要再看前面的问题了,以免影响你们思路,你们就从第一步看到第三步,与最后面的表格就行。
回复

使用道具 举报

 楼主| 发表于 2011-11-7 21:23 | 显示全部楼层
基本就是这两种情况了,现在还有一个特殊的地方是:如果A列中的数值,除以C列中的数值,商刚好是整数的情况,这时应该把商-1后,再利用上面的两种方法计算。现在这样子说各位大侠应该清楚了我的意图了吧?
回复

使用道具 举报

 楼主| 发表于 2011-11-7 21:30 | 显示全部楼层
本帖最后由 xiaoxie2830398 于 2011-11-7 21:31 编辑

为了便于核对,我再把楼顶的表附在下面,请各位高手在明白我的思路后,踊跃发表见解,谢谢!
表图.jpg
回复

使用道具 举报

 楼主| 发表于 2011-11-7 21:33 | 显示全部楼层
蓝桥玄霜 发表于 2011-11-5 15:55
楼主的叙述是:
1、A/(B+0.125)=C; 注:A即58,B即C列中的数值如11.25,C即58/11.375=5.098
2、取整 ...

高手们请赐教!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-29 11:29 , Processed in 0.131253 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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