vba自定义函数小结.docx

上传人:l*** 文档编号:11200248 上传时间:2022-04-17 格式:DOCX 页数:11 大小:30.81KB
返回 下载 相关 举报
vba自定义函数小结.docx_第1页
第1页 / 共11页
vba自定义函数小结.docx_第2页
第2页 / 共11页
点击查看更多>>
资源描述

《vba自定义函数小结.docx》由会员分享,可在线阅读,更多相关《vba自定义函数小结.docx(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、vba自定义函数小结 小结: 函数参数前面标记byval,实现的是实参加形参之间的值传递,即形参具有了实参的值或者说建立了一个实参的副本给了形参,这样对形参的操作不会影响实参; 函数参数前面标记byref,实现的是实参加形参之间的引用传递,这样对形参的操作会影响实参,或者说对形参的操作等同于对实参的操作; 在函数内部运用“r=形参”,实现的是把形参的副本给r,在函数中对r操作不会影像形参,假如运用“set r=形参”,那么对r的操作会影响形参,这里实现的效果是r只是形参的一个别名而已,所以对r的操作等同于对形参的操作。 在函数中形参前面不标记byref和byval,默认是引用传递byref,但

2、是这种状况下假如实参是excel中worksheet的range区域,则默认是值传递。 有时调试结果不符合预期,比如值传递,对”r=形参”中的r操作,尽然影响形参了,这可能是由于excel一时程序错乱导致,关闭重启就好了。 Public Function tjbcf(rng) r = rng Set r = rng留意带着set是错误的 k = 0 If UBound(r, 1) 1 And UBound(r, 2) = 1 Then For i = 1 To UBound(r, 1) f = 0 For j = 1 To i1 If r(1, i) = r(1, j) Then f = 1

3、Exit For End If Next j If f = 0 And r(1, i) Then k = k + 1 End If Next i End If If UBound(r, 1) 1 And UBound(r, 2) 1 Then For i = 1 To UBound(r, 1) For j = 1 To UBound(r, 2) If r(i, j) = Then f = 1 GoTo kk End If f = 0 For m = 1 To i1 If r(i, j) = r(i, n) Then f = 1 GoTo kk End If Next n kk: If f =

4、0 Then k = k + 1 End If Next j Next i End If tjbcf = k End Function Public Function getnum(str, m) = For i = m To Len(str) If InStr(0123456789., Mid(str, i, 1) 0 Then = & Mid(str, i, 1) Else GoTo kk End If Next i kk: getnum = Val() 留意是val不是value,在sheet中是value函数,在vb中则是val函数 End Function Public Functi

5、on getnum2(str, m) = f = 0 For i = m To Len(str) If InStr(0123456789., Mid(str, i, 1) 0 Then = & Mid(str, i, 1) Else If f = 1 And Then GoTo kk End If f = 1 End If Next i kk: getnum2 = Val() End Function Public Function NewMmult(a, b) a1 = a 把range a的值赋给a1,a是几行几列的range,a1就是 几行几列的数组。留意a1是一个variant数组,即

6、a1中的不同元素可以属性不同,a1中某个元素是字符,另一个可以是整数。 b1 = b 把range b的值赋给b1 For i = 1 To UBound(a1, 1) UBound(a1, 1)指的是数组a1第1维度的大小,即a1的行数 For j = 1 To UBound(a1, 2) UBound(a1, 2)指的是数组a1第2维度的大小,即a1的列数 If a1(i, j) = Then 推断a1(i,j)是不是空白,假如是,那就赋0值。 a1(i, j) = 0 End If Next j Next i For i = 1 To UBound(b1, 1) For j = 1 To

7、 UBound(b1, 2) If b1(i, j) = Then b1(i, j) = 0 End If Next j Next i NewMmult = Application.MMult(a1, b1) End Function Public Function sim(str1, str2) If Len(str2) = 0 Then sim = 0 GoTo kk End If sim = 0 For i = 1 To Len(str2) If InStr(str1, Mid(str2, i, 1) 0 Then sim = sim + 1 End If Next i sim = si

8、m / Len(str2) kk: End Function Public Function sima(ByVal str1, ByVal str2) If Len(str2) = 0 Then sima = 0 GoTo kk End If sima = 0 l = Len(str2) For i = 1 To Len(str2) If InStr(str1, Mid(str2, i, 1) 0 Then sima = sima + 1 str1 = Application.WorksheetFunction.Substitute(str1, Mid(str2, i, 1), , 1) En

9、d If Next i sima = sima / l kk: End Function Public Function mcc(rng, rng1, str1, Optional rng2 = , Optional str2, Optional rng3 = , Optional str3, Optional rng4 = , Optional str4, Optional rng5 = , Optional str5) r = rng r1 = rng1 r2 = rng2 r3 = rng3 r4 = rng4 r5 = rng5 mcc = If Application.CountA(

10、rng2) = 1 Then For i = 1 To UBound(r, 1) UBound(a1, 1)指的是数组a1第1维度的大小,即a1的行数 If Application.WorksheetFunction.And(r1(i, 1) = str1) Then mcc = r(i, 1) GoTo kk End If Next i End If If Application.CountA(rng3) = 1 Then For i = 1 To UBound(r, 1) UBound(a1, 1)指的是数组a1第1维度的大小,即a1的行数 If Application.Worksheet

11、Function.And(r1(i, 1) = str1, r2(i, 1) = str2) Then mcc = r(i, 1) GoTo kk End If Next i End If If Application.CountA(rng4) = 1 Then For i = 1 To UBound(r, 1) UBound(a1, 1)指的是数组a1第1维度的大小,即a1的行数 If Application.WorksheetFunction.And(r1(i, 1) = str1, r2(i, 1) = str2, r3(i, 1) = str3) Then mcc = r(i, 1)

12、GoTo kk End If Next i End If If Application.CountA(rng5) = 1 Then For i = 1 To UBound(r, 1) UBound(a1, 1)指的是数组a1第1维度的大小,即a1的行数 If Application.WorksheetFunction.And(r1(i, 1) = str1, r2(i, 1) = str2, r3(i, 1) = str3, r4(i, 1) = str4) Then mcc = r(i, 1) GoTo kk End If Next i End If For i = 1 To UBound(

13、r, 1) UBound(a1, 1)指的是数组a1第1维度的大小,即a1的行数 If Application.WorksheetFunction.And(r1(i, 1) = str1, r2(i, 1) = str2, r3(i, 1) = str3, r4(i, 1) = str4, r5(i, 1) = str5) Then mcc = r(i, 1) GoTo kk End If Next i kk: End Function Public Function mccd(rng, rng1, str1, Optional rng2 = , Optional str2, Optional

14、 rng3 = , Optional str3, Optional rng4 = , Optional str4, Optional rng5 = , Optional str5) r = rng r1 = rng1 r2 = rng2 r3 = rng3 r4 = rng4 r5 = rng5 mccd = If Application.CountA(rng2) = 1 Then For i = 1 To UBound(r, 2) UBound(a1, 1)指的是数组a1第1维度的大小,即a1的行数 If Application.WorksheetFunction.And(r1(1, i)

15、= str1) Then mccd = r(1, i) GoTo kk End If Next i End If If Application.CountA(rng3) = 1 Then For i = 1 To UBound(r, 2) UBound(a1, 1)指的是数组a1第1维度的大小,即a1的行数 If Application.WorksheetFunction.And(r1(1, i) = str1, r2(1, i) = str2) Then mccd = r(1, i) GoTo kk End If Next i End If If Application.CountA(rng

16、4) = 1 Then For i = 1 To UBound(r, 2) UBound(a1, 1)指的是数组a1第1维度的大小,即a1的行数 If Application.WorksheetFunction.And(r1(1, i) = str1, r2(1, i) = str2, r3(1, i) = str3) Then mccd = r(1, i) GoTo kk End If Next i End If If Application.CountA(rng5) = 1 Then For i = 1 To UBound(r, 2) UBound(a1, 1)指的是数组a1第1维度的大小

17、,即a1的行数 If Application.WorksheetFunction.And(r1(1, i) = str1, r2(1, i) = str2, r3(1, i) = str3, r4(1, i) = str4) Then mccd = r(1, i) GoTo kk End If Next i End If For i = 1 To UBound(r, 2) UBound(a1, 1)指的是数组a1第1维度的大小,即a1的行数 If Application.WorksheetFunction.And(r1(1, i) = str1, r2(1, i) = str2, r3(1,

18、i) = str3, r4(1, i) = str4, r5(1, i) = str5) Then mccd = r(1, i) GoTo kk End If Next i kk: End Function Public Function nsim(str, rng) r1 = rng r2 = rng str1 = str str2 = str v = sima(str, r(1, 1) + sima(r(1, 1), str2) str1 = str 这里不再须要赋值,因为sima设置的是值传递byval,sima调用实参str和r(1,1)不影响实参。 str2 = str k = 1

19、For i = 2 To UBound(r, 1) m = (sima(str, r(i, 1) + sima(r(i, 1), str) str1 = str str2 = str If v vba自定义函数小结 青春自定义 html运用自定义标签 MFC绘制自定义按钮 uap63自定义参照 初识朗识自定义测评 情感散文:爱的自定义 如何用自定义筛选数据 自定义内容区编辑流程 VFP0406变量作用域、自定义函数汇总(定稿) 本文来源:网络收集与整理,如有侵权,请联系作者删除,谢谢!第11页 共11页第 11 页 共 11 页第 11 页 共 11 页第 11 页 共 11 页第 11 页 共 11 页第 11 页 共 11 页第 11 页 共 11 页第 11 页 共 11 页第 11 页 共 11 页第 11 页 共 11 页第 11 页 共 11 页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 策划方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁