Excel精英培训网

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

[已解决]自定义了一个函数类似 Vlookup,但出现了问题

[复制链接]
发表于 2013-10-30 23:20 | 显示全部楼层 |阅读模式
本帖最后由 ebbe 于 2013-11-8 21:01 编辑

Function DTime(查找值 As Range, 查找范围 As Range, 查找列数 As Integer, 返回列数 As Integer)
LastRow = 查找范围(Rows.Count, 1).End(xlUp).Row
For i = 1 To LastRow
    If 查找值 = 查找范围(i, 查找列数) Then
        Result = 查找范围(i, 返回列数)
        Exit For
    End If
Next i
DTime = Result
End Function

我这个的function的作用是,在 查找范围 的“查找列数”内,查找 “查找值”,然后返回查找范围内的 返回列数 的值

例如:
              A              B
1
11
2
12
3
13
4
14
5
15
6
16
7
17

上述数字为查找范围,=Dtime(17,"A1:B7",2,1),那么结果返回值为7。

但是在表格关闭状态下,Vlookup能取到值,但我的函数却不能,且返回#value。请帮忙分析代码是怎么回事



最佳答案
2013-11-1 11:28
ebbe 发表于 2013-10-31 22:28
对,跨工作表查询,Vlookup就没有问题。我这个DTime就有问题了。

已解决

(, 下载次数: 16)
 楼主| 发表于 2013-10-30 23:23 | 显示全部楼层
本帖最后由 ebbe 于 2013-10-30 23:24 编辑


但是在表格关闭状态下,Vlookup能取到值,但我的函数却不能,且返回#value。请分析代码是怎么回事


回复

使用道具 举报

发表于 2013-10-31 00:46 | 显示全部楼层
ebbe 发表于 2013-10-30 23:23
但是在表格关闭状态下,Vlookup能取到值,但我的函数却不能,且返回#value。请分析代码是怎么回事

提供数据附件。
回复

使用道具 举报

发表于 2013-10-31 08:43 | 显示全部楼层
查找范围应该要赋值给变量,你的自定义函数中根本没有这一步,所有不行.
回复

使用道具 举报

发表于 2013-10-31 09:05 | 显示全部楼层
首先第一个参数不要定义为range,第二个参数你定义为range的话,就应该在公式里引用range,但你写的是一个字符串常量.修改这两点应该就可以了,代码没细看
回复

使用道具 举报

 楼主| 发表于 2013-10-31 21:30 | 显示全部楼层
那么的帅 发表于 2013-10-31 00:46
提供数据附件。

这是两个表格,我都把它放在桌面上了

帮助.rar

13.62 KB, 下载次数: 2

回复

使用道具 举报

 楼主| 发表于 2013-10-31 21:32 | 显示全部楼层
本帖最后由 ebbe 于 2013-10-31 21:33 编辑
Dj_soo 发表于 2013-10-31 09:05
首先第一个参数不要定义为range,第二个参数你定义为range的话,就应该在公式里引用range,但你写的是一个字符 ...

说明一下,我的第一个参数,在例子中我直接写了数字,但是我公式是在excel表格里选择一个单元格的,所以是Range。比如说,我想找到和C1单元格内容相同的数,则第一个参数就为“C1”。

第二个参数,就不太明白你说的什么意思了


例如:
              A              B
1
11
2
12
3
13
4
14
5
15
6
16
7
17

上述数字为查找范围,=Dtime(“C1”,"A1:B7",2,1),那么结果返回值为7。-----单元格C1中的内容为17.
回复

使用道具 举报

 楼主| 发表于 2013-10-31 21:42 | 显示全部楼层
sliang28 发表于 2013-10-31 08:43
查找范围应该要赋值给变量,你的自定义函数中根本没有这一步,所有不行.

我觉得你说的应该是对的,应该增加什么代码?谢谢!
回复

使用道具 举报

发表于 2013-10-31 21:47 | 显示全部楼层
ebbe 发表于 2013-10-31 21:42
我觉得你说的应该是对的,应该增加什么代码?谢谢!

没有看你附件,这样你自己试一下,应该没有问题。
Function DTime(查找值 As Range, 查找范围 As Range, 查找列数 As Integer, 返回列数 As Integer)
arr=查找范围
LastRow = ubound(arr)
For i = 1 To LastRow
    If 查找值 = arr(i, 查找列数) Then
        Result = arr(i, 返回列数)
        Exit For
    End If
Next i
DTime = Result
End Function
回复

使用道具 举报

 楼主| 发表于 2013-10-31 22:11 | 显示全部楼层
sliang28 发表于 2013-10-31 21:47
没有看你附件,这样你自己试一下,应该没有问题。
Function DTime(查找值 As Range, 查找范围 As Range, ...

我试了一下你的代码,试验结果如下:

当我保存关闭引用表格和被引用表格后,再打开引用表格(被引用表格仍然保持关闭状态),最后还是出现#value!错误。Vlookup仍能查找到所要求的值

附件为试验结果,您可以查看一下

DTime Function问题.rar

11.11 KB, 下载次数: 5

点评

晕 你这是跨工作薄了,明天再看  发表于 2013-10-31 22:26
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 11:03 , Processed in 0.459520 second(s), 17 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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