Excel精英培训网

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

[已解决]自定义函数 解释 与 自定义函数 如何调试

[复制链接]
发表于 2012-8-18 21:43 | 显示全部楼层 |阅读模式
Function wlookup(ilook, rng As Range, icol As Integer, Optional N As Integer = 0)
    If rng.Column + icol < 1 Then wlookup = "": Exit Function
    arr = rng
    brr = rng.Offset(, IIf(icol > 0, icol - 1, icol))
    ReDim crr(1 To UBound(arr))
    For i = 1 To UBound(arr)
        If arr(i, 1) = ilook Then
            j = j + 1
            crr(j) = brr(i, 1)
        End If
    Next
    If N > j Then
        mm = "不存在"
    ElseIf N = 0 Then
        mm = crr(1)
    ElseIf N = -1 Then
        mm = crr(j)
    Else
        mm = crr(N)
    End If
    If TypeName(mm) = "Date" Then mm = Format(mm, "yyyy/m/d")
    wlookup = mm
End Function
VBA实战营考试题.zip (25.05 KB, 下载次数: 21)
发表于 2012-8-18 22:03 | 显示全部楼层
回复

使用道具 举报

发表于 2012-8-18 22:29 | 显示全部楼层    本楼为最佳答案   
本帖最后由 qushui 于 2012-8-18 22:34 编辑

还没人回答啊  那我就来先回答一下  算是抛砖引玉吧  呵呵  当然能被肯定就更好了  {:101:}
  1. Function wlookup(ilook, rng As Range, icol As Integer, Optional N As Integer = 0)
  2.     If rng.Column + icol < 1 Then wlookup = "": Exit Function '返回值的列标小于1超出界限,函数返回空,退出函数过程
  3.     arr = rng '搜索单元格区域数据赋值给不定型数组
  4.     brr = rng.Offset(, IIf(icol > 0, icol - 1, icol)) 'iif函数计算的是搜索单元格区域中返回值列与查找值列的列间距,offset单元格区域偏移后,单元格区域中需要返回值列就会是第一列
  5.     ReDim crr(1 To UBound(arr)) '定义固定大小数组
  6.     For i = 1 To UBound(arr)
  7.         If arr(i, 1) = ilook Then '找到查找值
  8.             j = j + 1 '记录查找值被找到的个数
  9.             crr(j) = brr(i, 1) '用数组记录与查找值同行的需要返回的数据字段
  10.         End If
  11.     Next
  12.     If N > j Then '返回位置N大于符合条件的记录个数
  13.         mm = "不存在"
  14.     ElseIf N = 0 Then '返回第一个符合条件的记录
  15.         mm = crr(1)
  16.     ElseIf N = -1 Then '返回最后一个符合条件的记录
  17.         mm = crr(j)
  18.     Else '返回第N个符合条件的记录
  19.         mm = crr(N)
  20.     End If
  21.     If TypeName(mm) = "Date" Then mm = Format(mm, "yyyy/m/d") '如果变量mm是日期型将mm格式化为日期型
  22.     wlookup = mm '向函数名赋值
  23. End Function

  24. Sub 调试()
  25. With Worksheets("自定义函数")
  26. ss = wlookup(.Range("a15"), .Range("b1:e9"), 3, 0)
  27. End With
  28. '打开本地窗口,在该过程中,按F8逐行执行代码,随着代码一步步的执行,就可以看到代码的执行情况,在本地窗口中也可以看到过程变量的值
  29. '改变自定义函数的参数就可以测试代码的所有分支
  30. '当然直接在工作表中直接使用自定义函数调试,就需要在代码的某行设置断点或在某处加入关键字stop,这样会从工作表界面跳转到vbe界面,再按F8逐行运行就可以了
  31. End Sub
复制代码

点评

ls
谢谢,详细解释,辛苦了  发表于 2012-8-18 22:47
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-5 18:19 , Processed in 0.145854 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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