Excel精英培训网

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

[已解决]vba 自定义函数 公式中所用的某个值是错误的数据类型

[复制链接]
发表于 2013-1-16 17:52 | 显示全部楼层 |阅读模式
vba 自定义函数 公式中所用的某个值是错误的数据类型,请老师帮忙解决,代码如下
Public Function NSL(rng1 As Range, rng2 As Range)
    Dim str As Variant
    If rng1 < 125 Then
        str = "LOOKUP(" & rng1.Address(0, 0) & ",{1,13,18,23,28,33,38,43,48,53,58,63,68,73,78,83,88,93,98,103,108,113,118,125},{1,1.5,2,2.5,3,3.4,3.9,4.4,4.9,5.3,5.8,6.3,6.7,7.2,7.6,8.1,8.5,9,9.4,9.9,10.3,10.7,11.1,12})"
        NSL = Application.Evaluate(str)
    Else
        NSL = (Application.WorksheetFunction.Round(rng1, -1) - 120) * 0.08 + 11.1
    End If
    NSL = Round(NSL * 0.0038 * rng2 * rng2 / 100, 4)
End Function
最佳答案
2013-1-16 18:33
aa2.rar (9.1 KB, 下载次数: 16)
发表于 2013-1-16 18:02 | 显示全部楼层
不知道这个函数是要做什么。
因为看到rng1>=125时,用是rng1的值,结果不出错(但不知有何意义)
所以是否rng1<125时,也用rng1的值,而非rng1.address?(同上)


Public Function NSL(rng1 As Range, rng2 As Range)
    Dim str As Variant
    If rng1 < 125 Then
        str = "LOOKUP(" & rng1 & ",{1,13,18,23,28,33,38,43,48,53,58,63,68,73,78,83,88,93,98,103,108,113,118,125},{1,1.5,2,2.5,3,3.4,3.9,4.4,4.9,5.3,5.8,6.3,6.7,7.2,7.6,8.1,8.5,9,9.4,9.9,10.3,10.7,11.1,12})"
        NSL = Application.Evaluate(str)
    Else
        NSL = (Application.WorksheetFunction.Round(rng1, -1) - 120) * 0.08 + 11.1
    End If
    NSL = Round(NSL * 0.0038 * rng2 * rng2 / 100, 4)
End Function

评分

参与人数 1 +3 收起 理由
yangming27 + 3

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2013-1-16 18:14 | 显示全部楼层
爱疯 发表于 2013-1-16 18:02
不知道这个函数是要做什么。
因为看到rng1>=125时,用是rng1的值,结果不出错(但不知有何意义)
所以是否 ...

aa.rar (1.72 KB, 下载次数: 9)
回复

使用道具 举报

发表于 2013-1-16 18:33 | 显示全部楼层    本楼为最佳答案   
aa2.rar (9.1 KB, 下载次数: 16)
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 23:34 , Processed in 0.359043 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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