Excel精英培训网

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

[已解决]帮忙修改下自定义函数

[复制链接]
发表于 2011-8-11 11:57 | 显示全部楼层 |阅读模式
代码:
Public Function netpay(t As Integer) As Integer
Application.Volatile
Dim r As Integer
Dim a As Integer
  
For t = 1 To 111
   For r = 3 To 113
   
netpay = Val(Cells(r, 22)) - Val(Cells(r, 24)) _
- Val(Cells(r, 25)) - Val(Cells(r, 26)) _
- Val(Cells(r, 27)) - Val(Cells(r, 28)) _
- Val(Cells(r, 29))
End If
  Next
Next
End Function
是这样子的,我想当单元格的序号从1到111的时候,函数netpay(单元格)的值就是Val(Cells(r, 22)) - Val(Cells(r, 24)) _
- Val(Cells(r, 25)) - Val(Cells(r, 26)) _
- Val(Cells(r, 27)) - Val(Cells(r, 28)) _
- Val(Cells(r, 29))
而且r从3到113递增
我设计的这个自定义函数试了下,运行不了,请大侠帮忙看看问题所在,谢谢了
最佳答案
2011-8-11 12:46
回复 jiangslly 的帖子

如是我上面说的那样的话,可用这个来试试


  1. Public Function netpay(T As Range)
  2.     If T.Value > 0 And T.Value < 112 Then
  3.         netpay = Cells(T.Row, "V") - Application.Sum(Range(Cells(T.Row, "W"), Cells(T.Row, "AC")))
  4.     Else
  5.         netpay = ""
  6.     End If
  7. End Function
复制代码

其实这样不如直接用函数来做,还简单些

if(and(a3>0,a3<112),v3-sum(W3:AC3),"")
发表于 2011-8-11 12:01 | 显示全部楼层
本帖最后由 无聊的疯子 于 2011-8-11 12:08 编辑

回复 jiangslly 的帖子

End If没有if

For t = 1 To 111  并未发现该循环的用处!

最好把你的附件都拿来,加个说明!!

回复

使用道具 举报

 楼主| 发表于 2011-8-11 12:11 | 显示全部楼层
回复 无聊的疯子 的帖子

见附件,主要函数名为netpay()  在模块2里面

复件 工资计算模板.zip

26.47 KB, 下载次数: 6

回复

使用道具 举报

发表于 2011-8-11 12:21 | 显示全部楼层
回复 jiangslly 的帖子

而且r从3到113递增   这个是什么意思??

你是不是想当序号是1和111的时候求出  V3-sum(W3:AC3)的结果??

回复

使用道具 举报

 楼主| 发表于 2011-8-11 12:27 | 显示全部楼层
回复 无聊的疯子 的帖子

另外我修改了代码
Public Function netpay(t As Integer) As Integer
Application.Volatile
Dim r As Integer
Dim a As Integer
For r = 3 To 111
  t = Cells(r, 1).Row
  If t = r Then
netpay = Val(Cells(t, 22)) - Val(Cells(t, 24)) _
- Val(Cells(t, 25)) - Val(Cells(t, 26)) _
- Val(Cells(t, 27)) - Val(Cells(t, 28)) _
- Val(Cells(t, 29))
  End If
Next
End Function
感觉这样是可以了,但是还不行,真晕啊
回复

使用道具 举报

 楼主| 发表于 2011-8-11 12:28 | 显示全部楼层
回复 无聊的疯子 的帖子

是的,我是想通过序号的递增,来计算行的值
回复

使用道具 举报

发表于 2011-8-11 12:33 | 显示全部楼层
回复 jiangslly 的帖子

就拿你的附件来说,第3行,A3的值是1 (介与1和111之间)

你想要的最终结果是 AD3=V3-sum(W3:AC3) 和 =netpay(A3) 这个结果是一样的??

而下面的应该是  AD4=V4-sum(W4:AC4)   和 =netpay(A4) 结果是一样的?

当A列的序号是112时,=netpay(A112) 则不返回值??或者返回0?
回复

使用道具 举报

发表于 2011-8-11 12:46 | 显示全部楼层    本楼为最佳答案   
回复 jiangslly 的帖子

如是我上面说的那样的话,可用这个来试试


  1. Public Function netpay(T As Range)
  2.     If T.Value > 0 And T.Value < 112 Then
  3.         netpay = Cells(T.Row, "V") - Application.Sum(Range(Cells(T.Row, "W"), Cells(T.Row, "AC")))
  4.     Else
  5.         netpay = ""
  6.     End If
  7. End Function
复制代码

其实这样不如直接用函数来做,还简单些

if(and(a3>0,a3<112),v3-sum(W3:AC3),"")
回复

使用道具 举报

 楼主| 发表于 2011-8-11 13:55 | 显示全部楼层
回复 无聊的疯子 的帖子

这位大哥,谢谢你,但是有个问题,当我运行其他程序的时候,为什么这边的值会全部变为零呢?有什么方法可以解决?谢谢!
回复

使用道具 举报

 楼主| 发表于 2011-8-11 16:11 | 显示全部楼层
回复 无聊的疯子 的帖子

是这样子,我在一张工资表中做好之后,我在另一张表对这个数据进行汇总,但是发现汇总的时候,之前工资表用自定义函数的值都为零了,请问怎么解决这个问题?谢谢,你有QQ吗?,要不我加你了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-23 21:00 , Processed in 0.377366 second(s), 6 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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