Excel精英培训网

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

[已解决]谁能帮忙解读一下这个代码?

[复制链接]
发表于 2011-12-1 16:53 | 显示全部楼层 |阅读模式
先前发了一个表格,请人写了一段代码,还不错,功能可以实现了。但因有时要根据需要调整一下表格中内容的位置,因不知代码是什么意思,所以无从修改,现我将代码图附上,请高手们详细解读一番,谢谢!
代码.jpg
最佳答案
2011-12-14 17:06
本帖最后由 mxg825 于 2011-12-14 17:22 编辑

Sub MXG825()
Dim ARR, CRR, R&, X&, Z1!, JZ!, Z2! 'DIM 声明变量,ARR CRR 是数组,&=Long长整型,=Single 是单精度(有小数)
Dim JS1!, JS2!, JS3!
R = Range ("B65536").End(xlUp).Row '取得B列有数据的最后一个单元格 行号
Application.ScreenUpdating = False '暂时关闭屏幕刷新 (下面一个 对应 开启)
Range ("E1:E" & R).ClearContents '清空 E列数据
ARR = Range ("B1").Resize(R, 4) '数组ARR 赋值= B1 扩展 R行(变量),4列
Range ("A4").Copy '复制A4 单元格
Range ("C1").Resize(R, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlAdd '选择性粘贴到 C列,方式=累加
Range ("C1").Resize(R, 1).Sort Key1:=Range("C1") '对C列进行 排序 从小到大
CRR = Range ("C1:C" & R) '数组ARR 赋值= C列 排序后的数据
Range ("A1").Select     '选取A1单元格
JS1 = [A2]: JS2 = [A4]: JS3 = [A6] ' 对几个变量赋值,(基数1,基数2,基数3)
For X = 1 To R '开始循环
   Z2 = JS1 / (ARR(X, 2) + JS2)      ' Z2=基数1/(B列+基数2)
   Z2 = Int(Z2) + CInt (Int(Z2) = Z2) ' Z2=如果 Z2 是整数时 减-1
   Z1 = Z2 * (ARR(X, 2) + JS2)       'Z1= Z2*(B列+基数2)
   If (JS1 - Z1) <= CRR(1, 1) Then '如果 基数1-Z1 小于等于 CRR 数据中的最小值
        ARR(X, 4) = Application.Round((ARR(X, 1) + JS2) / Z2 / JS3 * ARR(X, 3), 5)
   Else '如果大于  在CRR 数组中 找一个 不大于基数1 - Z1 的最大值
100:
        JZ = Application.Lookup(JS1 - Z1 - 0.00001, CRR)
        Z1 = Z1 + JZ
        If JS1 - Z1 > CRR(1, 1) Then GoTo 100 '加一次还大,再加一次 直到条件不成立
        ARR(X, 4) = Application.Round(((ARR(X, 1) + JS2) * (ARR(X, 2) + JS2)) / Z1 / JS3 * ARR(X, 3), 5)
   End If
Next
Range ("B1").Resize(R, 4) = ARR '把ARR数组 填充到单元格
Application.ScreenUpdating = True '暂时开启屏幕刷新 (上面一个 对应 关闭) 主要提高速度
End Sub

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2011-12-1 17:03 | 显示全部楼层
你发个图上来人家怎么给你解释?照着图再手工输入一次代码?
回复

使用道具 举报

 楼主| 发表于 2011-12-1 19:11 | 显示全部楼层
wayy 发表于 2011-12-1 17:03
你发个图上来人家怎么给你解释?照着图再手工输入一次代码?

应该可以的呀,我先前看兰版能对代码做解说的,不过我没时间学,想讨个速成的,呵呵。代码应该能化成文字表达出来的吧?比如声明ARR,CRR……我不知道这ARR是什么?
回复

使用道具 举报

 楼主| 发表于 2011-12-1 19:13 | 显示全部楼层
可能替我编写代码的这个原作者最有解释权了,可他不知在哪?
回复

使用道具 举报

发表于 2011-12-14 17:06 | 显示全部楼层    本楼为最佳答案   
本帖最后由 mxg825 于 2011-12-14 17:22 编辑

Sub MXG825()
Dim ARR, CRR, R&, X&, Z1!, JZ!, Z2! 'DIM 声明变量,ARR CRR 是数组,&=Long长整型,=Single 是单精度(有小数)
Dim JS1!, JS2!, JS3!
R = Range ("B65536").End(xlUp).Row '取得B列有数据的最后一个单元格 行号
Application.ScreenUpdating = False '暂时关闭屏幕刷新 (下面一个 对应 开启)
Range ("E1:E" & R).ClearContents '清空 E列数据
ARR = Range ("B1").Resize(R, 4) '数组ARR 赋值= B1 扩展 R行(变量),4列
Range ("A4").Copy '复制A4 单元格
Range ("C1").Resize(R, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlAdd '选择性粘贴到 C列,方式=累加
Range ("C1").Resize(R, 1).Sort Key1:=Range("C1") '对C列进行 排序 从小到大
CRR = Range ("C1:C" & R) '数组ARR 赋值= C列 排序后的数据
Range ("A1").Select     '选取A1单元格
JS1 = [A2]: JS2 = [A4]: JS3 = [A6] ' 对几个变量赋值,(基数1,基数2,基数3)
For X = 1 To R '开始循环
   Z2 = JS1 / (ARR(X, 2) + JS2)      ' Z2=基数1/(B列+基数2)
   Z2 = Int(Z2) + CInt (Int(Z2) = Z2) ' Z2=如果 Z2 是整数时 减-1
   Z1 = Z2 * (ARR(X, 2) + JS2)       'Z1= Z2*(B列+基数2)
   If (JS1 - Z1) <= CRR(1, 1) Then '如果 基数1-Z1 小于等于 CRR 数据中的最小值
        ARR(X, 4) = Application.Round((ARR(X, 1) + JS2) / Z2 / JS3 * ARR(X, 3), 5)
   Else '如果大于  在CRR 数组中 找一个 不大于基数1 - Z1 的最大值
100:
        JZ = Application.Lookup(JS1 - Z1 - 0.00001, CRR)
        Z1 = Z1 + JZ
        If JS1 - Z1 > CRR(1, 1) Then GoTo 100 '加一次还大,再加一次 直到条件不成立
        ARR(X, 4) = Application.Round(((ARR(X, 1) + JS2) * (ARR(X, 2) + JS2)) / Z1 / JS3 * ARR(X, 3), 5)
   End If
Next
Range ("B1").Resize(R, 4) = ARR '把ARR数组 填充到单元格
Application.ScreenUpdating = True '暂时开启屏幕刷新 (上面一个 对应 关闭) 主要提高速度
End Sub

123.jpg
回复

使用道具 举报

发表于 2011-12-14 17:10 | 显示全部楼层
本帖最后由 mxg825 于 2011-12-14 17:11 编辑

我记得你的问题,,,表达不清楚  难倒了大家

代码是按你的要求 编写的。。。

你的问题很绕。。没办法 解释清楚!
回复

使用道具 举报

 楼主| 发表于 2011-12-14 20:26 | 显示全部楼层
你都没办法的话,看来没戏了
回复

使用道具 举报

 楼主| 发表于 2011-12-14 20:31 | 显示全部楼层
mxg825 发表于 2011-12-14 17:06
本帖最后由 mxg825 于 2011-12-14 17:22 编辑 Sub MXG825()Dim ARR, CRR, R&amp;, X&amp;, Z1!, JZ!, Z2! 'DIM ...

谢谢,你这样解释一下可能对我有用,我先试着理解一下了。
回复

使用道具 举报

 楼主| 发表于 2011-12-14 21:58 | 显示全部楼层
mxg825 发表于 2011-12-14 17:06
本帖最后由 mxg825 于 2011-12-14 17:22 编辑 Sub MXG825()Dim ARR, CRR, R&amp;, X&amp;, Z1!, JZ!, Z2! 'DIM ...

{:051:}你只花了10分钟的时间,使我对这组代码认识了不少,谢过,以后还要经常麻烦你呢,我的朋友
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-14 07:16 , Processed in 0.298585 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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