最新excel多变量自定义函数优秀word范文 11页.docx
- 文档编号:7307872
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:9
- 大小:18.71KB
最新excel多变量自定义函数优秀word范文 11页.docx
《最新excel多变量自定义函数优秀word范文 11页.docx》由会员分享,可在线阅读,更多相关《最新excel多变量自定义函数优秀word范文 11页.docx(9页珍藏版)》请在冰豆网上搜索。
最新excel多变量自定义函数优秀word范文11页
本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!
==本文为word格式,下载后可方便编辑和修改!
==
excel多变量自定义函数
篇一:
EXCEL中如何自定义函数
Excel函数虽然丰富,但并不能满足我们的所有需要。
我们可以自定义一个函数,来完成一些特定的运算。
下面,我们就来自定义一个计算梯形面积的函数:
1、执行工具;宏;VisualBasic编辑器菜单命令(或按Alt+F11快捷键),打开VisualBasic编辑窗口。
2、在窗口中,执行插入;模块菜单命令,插入一个新的模块——模块1。
3、在右边的代码窗口中输入以下代码:
FunctionV(a,b,h)V=h*(a+b)/2EndFunction
4、关闭窗口,自定义函数完成。
以后可以像使用内置函数一样使用自定义函数。
提示:
用上面方法自定义的函数通常只能在相应的工作簿中使用。
篇二:
自定义Excel函数-自定义Excel
自定义Excel函数-自定义Excel来源:
excel格子社区
BA之自定义函数这一贴说的是自定义函数。
Excel本身已自带了很多函数,供我们使用,但有些问题用原有的函数解决起来很复杂,甚至是无能为力,但有了VBA,可能就可以现实。
怎样自定义一个函数?
下面我们建一个名为RangeCount和函数,用来统计给定单元格数量。
上贴说过怎么插入一个宏(子程序),其实细心的朋友就会发现,里面有一项函数的选项,就是用这个添加了!
键入你需要的名称RangeCount,即会自动生成一个函数的头PublicFunctionRangeCount()和尾EndFunction!
这时大家可以知道,子程序都是以Sub关键字开头,而函数是以Function关键字开头。
怎样给自定义函数传递参数?
用过Sum函数的朋友都知道Sum的用法,在单元格中键入=Sum(A1:
A10)就能对A1:
A10进行求和,那么怎么让我们的自定义函数也有此功能呢,其实很简单,只要在FunctionRangeCount()中的(与)之间加入即可,象现在我们要给这个自定义函数传递一个单元格的参数,即在()间加入XRanAsRange即可。
其中XRan
就是我们给这个参数设定的名称,As是关键字,而Range就是给定参当数的类型(单元格类型),更详细的说明可以参见VBA的帮助(上贴有说明怎么用帮助了吧:
))。
怎么样自定义函数加入功能?
其实也和子程序一样,在函数的头PublicFunctionRangeCount()和尾EndFunction之间就可以加入代码,我们这个函数的代码只有一句:
RangeCount=XRan.Count怎么样让自定义函数返回值?
从上面的例子看出,只要将函数的名称设定为需要返回的值即可。
怎么当前工作表中使用自定久函数?
使用自定义函数的方法其实和一般函数的方法是一样的,在单元格中键入=RangeCount(A1:
A10),即可以得到值(10)!
当然,也可以通过菜单插入/函数,在类别中选择用户自定义里找到你自定义的函数。
怎么在工作表里使用别的工作表里的自定义函数?
从菜单插入/函数,类别中的用户自定义里,可以看到,如果这个自定义函数不是在当前的工作表里的,函数会变成——文件名.xls!
函数名了,这样我们使用上面的自定义函数就变成=Book1.xls!
RangeCount(A1:
A10)(设我们刚才保存文件为Book1)。
怎么样在任何工作表中使用自定义函数?
自定义了函
数后,每一次使用都要打开这个工作簿,不方便,那么怎么样让任何工作簿都能使用这个自定义函数呢?
有两个方法,第一个就是把代码写在上面说到的个人宏工作簿中,因为个人宏工作簿都是随Excel自动打开的,那么我们就可以通过PERSONAL.XLS!
函数名来使用这个自定义函数。
第二个方法就是加载宏(关于加载宏的其它用法和具体说明以后还会有专门的一贴),将包含这个自定义函数的工作簿,去掉无关的内容(不去当然也行啦!
)后另存为加载宏(不会不知道怎么另存吧,汗!
后注!
),这样在菜单工具/加载宏里,将相关项前打勾,即可使用该自定义函数,这时使用函数的方法只要直接用函数名即可,如=RangeCount(A1:
A10)。
最后再说一点大家少遇到的现象:
用过VBA后,大家知道在同一模块中是不能有相同名称的子程序与函数的,如果有,运行时会提示存在二义性!
但在不同模块中,却能有相同甸称的函数存在,那么怎么使用这样的函数呢?
从菜单插入/函数,类别中的用户自定义里,我们可以看出这样的函数变成模块名.函数名了,这样我们的使用方法就是=模块
1.RangeCount(A1:
A10)
或=模块2.RangeCount(A1:
A10)。
后注:
详细的另存为加载宏的过程,点击菜单/文件/另存为,在文件类型里选择MicrosoftExcel加载宏项,这时文件夹自动转到保存加载宏的AddIns,再保存即可。
附:
上面RangeCount的完整代码:
FunctionRangeCount(XRanAsRange)RangeCount=XRan.Count
EndFunction
下面给出两个自定义函数,按给颜色求和SumColor与计数CountColor
FunctionSumColor(rColorAsRange,rSumRangeAsRange)
DimrCellAsRangeDimiColAsInteger
DimvResult
Application.Volatile
iCol=rColor.Interior.ColorIndexForEachrCellInrSumRangeIfrCell.Interior.ColorIndex=iColThen
vResult=WorksheetFunction.Sum(rCell)+vResult
EndIfNextrCellSumColor=vResult
EndFunction
FunctionCountColor(rColorAsRange,rSumRangeAsRange)
DimrCellAsRangeDimiColAsInteger
DimvResult
Application.Volatile
iCol=rColor.Interior.ColorIndexForEachrCellInrSumRangeIfrCell.Interior.ColorIndex=iColThen
vResult=vResult+1EndIfNextrCell
CountColor=vResult
EndFunction
篇三:
ExcelVBA_自定义函数集
1,求得a年b月第c个星期d的日期
‘
‘求得a年b月第c个星期d的日期
Functionxqrq(myYear,myMonth,Optionaln%=1,Optionalmyxq%=1)AsDate'myYear年份,myMonth月份,n第几个,myxq星期几
'myxq=1(周日)、2(周一)、3(周二)...
DimmyDateAsDate,xq%
myDate=DateSerial(myYear,myMonth,1)
xq=Weekday(myDate)
Ifmyxq xqrq=myDate+7-xq+myxq+7*(n-1) Else xqrq=myDate+7*(n-1)-xq+myxq EndIf EndFunction 用法: =xqrq(1991,3,2,4)1991年3月第2个星期三返回1991-3-13 n默认为第1个,myxq默认为星期日(=1) 如果A1=1991,B1=3 E1=xqrq(A1,B1,,)返回1991-3-3 2,求得不相邻单元格区域的列数 ‘201X-2-5 ‘ Functionls(ParamArrayrngs()AsVariant) Dimd,ad1$,aa,bb,i%,j,cc1,cc2,ii% Setd=CreateObject("Scripting.Dictionary") Forii=0ToUBound(rngs) ad1=rngs(ii).Address(ReferenceStyle: =xlR1C1) IfInStr(ad1,",")>0Then aa=Split(ad1,",") Fori=0ToUBound(aa) IfInStr(aa(i),": ")>0Then bb=Split(aa(i),": ") cc1=Split(bb(0),"C") (1) cc2=Split(bb (1),"C") (1) Forj=Val(cc1)ToVal(cc2) d(j)="" Next Else j=Split(aa(i),"C") (1) d(j)="" EndIf Next Else IfInStr(ad1,": ")>0Then bb=Split(ad1,": ") cc1=Split(bb(0),"C") (1) cc2=Split(bb (1),"C") (1) Forj=Val(cc1)ToVal(cc2) d(j)="" Next Else j=Split(ad1,"C") (1) d(j)="" EndIf EndIf Next ls="有"&d.Count&"列。 " EndFunction 函数用法: =ls(A2: A10,B4: d7,C5: G8) 3,已知年月日的星期函数by: 狼版主 Functionmyweekday(ByValyAsLong,ByValmAsLong,ByValdAsLong)AsLongDimbiasAsLong Ifm>2Then bias=m-2 Else bias=10+m y=y-1 EndIf myweekday=(d+(13*bias-1)\5+(yMod100)+(yMod100)\4+(y\100)\4-2*(y\100))Mod7+1 EndFunction 本文来自CSDN博客,转载请标明出处: ‘201X-9-18修改 Functionmyweekday(ByValyAsLong,ByValmAsLong,ByValdAsLong)AsStringDimbiasAsLong,n& Ifm>2Then bias=m-2 Else bias=10+m y=y-1 EndIf n=(d+(13*bias-1)\5+(yMod100)+(yMod100)\4+(y\100)\4-2*(y\100))Mod7+1 myweekday="星期"&Mid("日一二三四五六",n,1) EndFunction 4,工龄计算 ‘技巧600实例之543.xls FunctionElapsed(StartDateAsDate,EndDateAsDate,ReturnTypeAsInteger) DimStartYearAsInteger'定义变量用以参数中开始日期的计算 DimStartMonthAsInteger DimStartDayAsInteger DimEndYearAsInteger'定义变量用以参数中结束日期的计算 DimEndMonthAsInteger DimEndDayAsInteger StartYear=Year(StartDate)'从参数中取得开始日期和结束日期的年数,月数,天数StartMonth=Month(StartDate) StartDay=Day(StartDate) EndYear=Year(EndDate) EndMonth=Month(EndDate) EndDay=Day(EndDate) IfEndDay -DateSerial(EndYear,EndMonth,EndDay)) EndMonth=EndMonth-1'从月数中借1后再进行减运算,从而得到相差天数 EndIf IfEndMonth EndYear=EndYear-1'从年数中借1后再进行减运算,从而得到相差月数 EndIf SelectCaseReturnType'如果没有以上特殊情况,则直接进行相减的运算 Case1'返回年数 Elapsed=EndYear-StartYear Case2'返回月数 Elapsed=EndMonth-StartMonth Case3'返回天数 Elapsed=EndDay-StartDay EndSelect EndFunction 5,排序 ‘ FunctionSortString(strAsString,Optionalignorecase=False)DimarrAsVariant 'Covertthestringtoanarray. arr=Split(str,"|") 'Sortthearraycase-sensitiveorcase-insensitive. IfignorecaseThen SortArrayarr,vbTextCom pare Else SortArrayarr,vbBinaryCompare EndIf 'Convertthearraybacktoastringandreturnit. SortString=Join(arr,"|") EndFunction SubSortArray(arrAsVariant,_ OptionalcompareAsVbCompareMethod=vbBinaryCompare)DimlbAsInteger,ubAsInteger,iAsInteger,strAsStringDimjAsInteger 'Ifargumentisnotanarray,thenexit. IfNotIsArray(arr)ThenExitSub lb=LBound(arr) ub=UBound(arr) 'Ifonlyoneelement,thenexit. Iflb=ubThenExitSub Fori=lbToub str=arr(i) Forj=lbToub 'Swapvaluesifoutoforder. IfStrComp(str,arr(j),compare)=-1Thenstr=arr(j) arr(j)=arr(i) arr(i)=str EndIf Next Next EndSub 6,不相邻单元格区域的重复个数和重复数据‘201X-6-6 ‘ Functioncf(rngAsRange,rng1AsRange,Optionalrng2AsRange)Setd=CreateObject("scripting.dictionary") Setd1=CreateObject("scripting.dictionary") ForEachcelInrng d(cel.Value)="" Next ForEachcelInrng1 Ifd.Exists(cel.Value)Then d1(cel.Value)="" EndIf Next IfNotrng2IsNothingThen ForEachcelInrng2 Ifd.Exists(cel.Value)Then d1(cel.Value)="" EndIf Next EndIf cf=d1.Count EndFunction Functioncfsj(rngAsRange,rng1AsRange,Optionalrng2AsRange)Setd=CreateObject("scripting.dictionary") Setd1=CreateObject("scripting.dictionary") ForEachcelInrng d(cel.Value)="" Next ForEachcelInrng1 Ifd.Exists(cel.Value)Then d1(cel.Value)=""
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新excel多变量自定义函数优秀word范文 11页 最新 excel 多变 自定义 函数 优秀 word 范文 11