最新excel多变量自定义函数优秀word范文 11页.docx

上传人:b****5 文档编号:7307872 上传时间:2023-01-22 格式:DOCX 页数:9 大小:18.71KB
下载 相关 举报
最新excel多变量自定义函数优秀word范文 11页.docx_第1页
第1页 / 共9页
最新excel多变量自定义函数优秀word范文 11页.docx_第2页
第2页 / 共9页
最新excel多变量自定义函数优秀word范文 11页.docx_第3页
第3页 / 共9页
最新excel多变量自定义函数优秀word范文 11页.docx_第4页
第4页 / 共9页
最新excel多变量自定义函数优秀word范文 11页.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

最新excel多变量自定义函数优秀word范文 11页.docx

《最新excel多变量自定义函数优秀word范文 11页.docx》由会员分享,可在线阅读,更多相关《最新excel多变量自定义函数优秀word范文 11页.docx(9页珍藏版)》请在冰豆网上搜索。

最新excel多变量自定义函数优秀word范文 11页.docx

最新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)=""

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1