excel中用vba自定义函数问
诚如楼上所述,这个功能用Excel内置的函数解决起来更方便。不过我想楼主可能是想借此学习VBA,给出几点拙见:
1、养成良好的编程习惯
这个可能体现在很多方面,最基础的要数命名了,变量的命名、过程和函数的命名等。 等程序一复杂,如果胡乱命名会带来很多麻烦,尤其是做维护的时候;
2、关注程序的执行效率
循环是编程时常用的一个语句,不过某些指令不用循环也能实现的话,应该不用循环,毕竟循环的执行效率差多了。
3、写自定义函数的注意事项
自定义函数是在系统内置函数解决不了问题时的替代品,它的执行效率是不如内置函数的。当自定义函数定义得越复杂时,需要的计算过程也越多,计算时响应...全部
诚如楼上所述,这个功能用Excel内置的函数解决起来更方便。不过我想楼主可能是想借此学习VBA,给出几点拙见:
1、养成良好的编程习惯
这个可能体现在很多方面,最基础的要数命名了,变量的命名、过程和函数的命名等。
等程序一复杂,如果胡乱命名会带来很多麻烦,尤其是做维护的时候;
2、关注程序的执行效率
循环是编程时常用的一个语句,不过某些指令不用循环也能实现的话,应该不用循环,毕竟循环的执行效率差多了。
3、写自定义函数的注意事项
自定义函数是在系统内置函数解决不了问题时的替代品,它的执行效率是不如内置函数的。当自定义函数定义得越复杂时,需要的计算过程也越多,计算时响应的速度也会慢下来。
所以有必要定义一下自定义函数的易失性,如定义成非易失性函数的代码是——
Application。Volatile (False)
下面给出比循环更快的Find方法:
Option Explicit
Function CheckExist(rngSource As Range, rngCompare As Range) As String
Dim c As Range
Application。
Volatile (False) '定义函数为非易失性函数
Set c = rngSource。Find(rngCompare, LookIn:=xlValues)
If Not c Is Nothing Then CheckExist = "有"
End Function
补充:
在你的代码基础上改,你比较一下跟你的有何不同就明白为什么你的得不出正确结果了。
在B2里输入公式:=比较(A2,$C$3:$C$21),其余下拉。
Option Explicit
Function 比较(dy As Range, dr As Range) As String
On Error GoTo 0
Dim a1 As Integer, a2 As Integer, b1 As Integer, b2 As Integer
a1 = dy。
Cells(1)。Row
a2 = dy。Cells(dy。Cells。Count)。Row
b1 = dr。Cells(1)。Row
b2 = dr。Cells(dr。Cells。Count)。
Row
Dim i As Integer, j As Integer
For i = a1 To a2
For j = b1 To b2
If Cells(i, 1) = Cells(j, 3) Then 比较 = 比较 & "有"
Next j
Next i
End Function。
收起