|
发表于 2012-8-18 22:29
|
显示全部楼层
本楼为最佳答案
本帖最后由 qushui 于 2012-8-18 22:34 编辑
还没人回答啊 那我就来先回答一下 算是抛砖引玉吧 呵呵 当然能被肯定就更好了 {:101:}- Function wlookup(ilook, rng As Range, icol As Integer, Optional N As Integer = 0)
- If rng.Column + icol < 1 Then wlookup = "": Exit Function '返回值的列标小于1超出界限,函数返回空,退出函数过程
- arr = rng '搜索单元格区域数据赋值给不定型数组
- brr = rng.Offset(, IIf(icol > 0, icol - 1, icol)) 'iif函数计算的是搜索单元格区域中返回值列与查找值列的列间距,offset单元格区域偏移后,单元格区域中需要返回值列就会是第一列
- 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 '返回位置N大于符合条件的记录个数
- mm = "不存在"
- ElseIf N = 0 Then '返回第一个符合条件的记录
- mm = crr(1)
- ElseIf N = -1 Then '返回最后一个符合条件的记录
- mm = crr(j)
- Else '返回第N个符合条件的记录
- mm = crr(N)
- End If
- If TypeName(mm) = "Date" Then mm = Format(mm, "yyyy/m/d") '如果变量mm是日期型将mm格式化为日期型
- wlookup = mm '向函数名赋值
- End Function
- Sub 调试()
- With Worksheets("自定义函数")
- ss = wlookup(.Range("a15"), .Range("b1:e9"), 3, 0)
- End With
- '打开本地窗口,在该过程中,按F8逐行执行代码,随着代码一步步的执行,就可以看到代码的执行情况,在本地窗口中也可以看到过程变量的值
- '改变自定义函数的参数就可以测试代码的所有分支
- '当然直接在工作表中直接使用自定义函数调试,就需要在代码的某行设置断点或在某处加入关键字stop,这样会从工作表界面跳转到vbe界面,再按F8逐行运行就可以了
- End Sub
复制代码 |
|