閱: 3908 | 回: 1
等級:初學(xué)者
-
積分:0
-
財富值:0.00
-
身份:普通用戶
自定義Excel函數(shù)-自定義Excel
BA之自定義函數(shù)
這一貼說的是自定義函數(shù)。Excel本身已自帶了很多函數(shù),供我們使用,但有些問題用原有的函數(shù)解決起來很復(fù)雜,甚至是無能為力,但有了VBA,可能就可以現(xiàn)實。
怎樣自定義一個函數(shù)?下面我們建一個名為RangeCount和函數(shù),用來統(tǒng)計給定單元格數(shù)量。上貼說過怎么插入一個宏(子程序),其實細心的朋友就會發(fā)現(xiàn),里面有一項函數(shù)的選項,就是用這個添加了!鍵入你需要的名稱RangeCount,即會自動生成一個函數(shù)的頭Public Function RangeCount()和尾End Function!這時大家可以知道,子程序都是以Sub關(guān)鍵字開頭,而函數(shù)是以Function關(guān)鍵字開頭。
怎樣給自定義函數(shù)傳遞參數(shù)?用過Sum函數(shù)的朋友都知道Sum的用法,在單元格中鍵入=Sum(A1:A10)就能對A1:A10進行求和,那么怎么讓我們的自定義函數(shù)也有此功能呢,其實很簡單,只要在Function RangeCount()中的(與)之間加入即可,象現(xiàn)在我們要給這個自定義函數(shù)傳遞一個單元格的參數(shù),即在()間加入XRan As Range即可。其中XRan就是我們給這個參數(shù)設(shè)定的名稱,As 是關(guān)鍵字,而Range就是給定參當數(shù)的類型(單元格類型),更詳細的說明可以參見VBA的幫助(上貼有說明怎么用幫助了吧:))。
怎么樣自定義函數(shù)加入功能?其實也和子程序一樣,在函數(shù)的頭Public Function RangeCount()和尾End Function之間就可以加入代碼,我們這個函數(shù)的代碼只有一句:RangeCount = XRan.Count
怎么樣讓自定義函數(shù)返回值?從上面的例子看出,只要將函數(shù)的名稱設(shè)定為需要返回的值即可。
怎么當前工作表中使用自定久函數(shù)?使用自定義函數(shù)的方法其實和一般函數(shù)的方法是一樣的,在單元格中鍵入=RangeCount(A1:A10),即可以得到值(10)!當然,也可以通過菜單插入/函數(shù),在類別中選擇用戶自定義里找到你自定義的函數(shù)。
怎么在工作表里使用別的工作表里的自定義函數(shù)?從菜單插入/函數(shù),類別中的用戶自定義里,可以看到,如果這個自定義函數(shù)不是在當前的工作表里的,函數(shù)會變成——文件名.xls!函數(shù)名了,這樣我們使用上面的自定義函數(shù)就變成=Book1.xls!RangeCount(A1:A10)(設(shè)我們剛才保存文件為Book1)。
怎么樣在任何工作表中使用自定義函數(shù)?自定義了函數(shù)后,每一次使用都要打開這個工作簿,不方便,那么怎么樣讓任何工作簿都能使用這個自定義函數(shù)呢?有兩個方法,第一個就是把代碼寫在上面說到的個人宏工作簿中,因為個人宏工作簿都是隨Excel自動打開的,那么我們就可以通過PERSONAL.XLS!函數(shù)名來使用這個自定義函數(shù)。第二個方法就是加載宏(關(guān)于加載宏的其它用法和具體說明以后還會有專門的一貼),將包含這個自定義函數(shù)的工作簿,去掉無關(guān)的內(nèi)容(不去當然也行啦!)后另存為加載宏(不會不知道怎么另存吧,汗!后注!),這樣在菜單工具/加載宏里,將相關(guān)項前打勾,即可使用該自定義函數(shù),這時使用函數(shù)的方法只要直接用函數(shù)名即可,如=RangeCount(A1:A10)。
最后再說一點大家少遇到的現(xiàn)象:用過VBA后,大家知道在同一模塊中是不能有相同名稱的子程序與函數(shù)的,如果有,運行時會提示存在二義性!但在不同模塊中,卻能有相同甸稱的函數(shù)存在,那么怎么使用這樣的函數(shù)呢?從菜單插入/函數(shù),類別中的用戶自定義里,我們可以看出這樣的函數(shù)變成模塊名.函數(shù)名了,這樣我們的使用方法就是=模塊1.RangeCount(A1:A10)或=模塊2.RangeCount(A1:A10)。
后注:詳細的另存為加載宏的過程,點擊菜單/文件/另存為,在文件類型里選擇Microsoft Excel加載宏項,這時文件夾自動轉(zhuǎn)到保存加載宏的AddIns,再保存即可。
附:上面RangeCount的完整代碼:
Function RangeCount(XRan As Range)
RangeCount = XRan.Count
End Function
下面給出兩個自定義函數(shù),按給顏色求和SumColor與計數(shù)CountColor
Function SumColor(rColor As Range, rSumRange As Range)
Dim rCell As Range
Dim iCol As Integer
Dim vResult
Application.Volatile
iCol = rColor.Interior.ColorIndex
For Each rCell In rSumRange
If rCell.Interior.ColorIndex = iCol Then
vResult = WorksheetFunction.Sum(rCell) + vResult
End If
Next rCell
SumColor = vResult
End Function
Function CountColor(rColor As Range, rSumRange As Range)
Dim rCell As Range
Dim iCol As Integer
Dim vResult
Application.Volatile
iCol = rColor.Interior.ColorIndex
For Each rCell In rSumRange
If rCell.Interior.ColorIndex = iCol Then
vResult = vResult + 1
End If
Next rCell
CountColor = vResult
End Function
BA之自定義函數(shù)
這一貼說的是自定義函數(shù)。Excel本身已自帶了很多函數(shù),供我們使用,但有些問題用原有的函數(shù)解決起來很復(fù)雜,甚至是無能為力,但有了VBA,可能就可以現(xiàn)實。
怎樣自定義一個函數(shù)?下面我們建一個名為RangeCount和函數(shù),用來統(tǒng)計給定單元格數(shù)量。上貼說過怎么插入一個宏(子程序),其實細心的朋友就會發(fā)現(xiàn),里面有一項函數(shù)的選項,就是用這個添加了!鍵入你需要的名稱RangeCount,即會自動生成一個函數(shù)的頭Public Function RangeCount()和尾End Function!這時大家可以知道,子程序都是以Sub關(guān)鍵字開頭,而函數(shù)是以Function關(guān)鍵字開頭。
怎樣給自定義函數(shù)傳遞參數(shù)?用過Sum函數(shù)的朋友都知道Sum的用法,在單元格中鍵入=Sum(A1:A10)就能對A1:A10進行求和,那么怎么讓我們的自定義函數(shù)也有此功能呢,其實很簡單,只要在Function RangeCount()中的(與)之間加入即可,象現(xiàn)在我們要給這個自定義函數(shù)傳遞一個單元格的參數(shù),即在()間加入XRan As Range即可。其中XRan就是我們給這個參數(shù)設(shè)定的名稱,As 是關(guān)鍵字,而Range就是給定參當數(shù)的類型(單元格類型),更詳細的說明可以參見VBA的幫助(上貼有說明怎么用幫助了吧:))。
怎么樣自定義函數(shù)加入功能?其實也和子程序一樣,在函數(shù)的頭Public Function RangeCount()和尾End Function之間就可以加入代碼,我們這個函數(shù)的代碼只有一句:RangeCount = XRan.Count
怎么樣讓自定義函數(shù)返回值?從上面的例子看出,只要將函數(shù)的名稱設(shè)定為需要返回的值即可。
怎么當前工作表中使用自定久函數(shù)?使用自定義函數(shù)的方法其實和一般函數(shù)的方法是一樣的,在單元格中鍵入=RangeCount(A1:A10),即可以得到值(10)!當然,也可以通過菜單插入/函數(shù),在類別中選擇用戶自定義里找到你自定義的函數(shù)。
怎么在工作表里使用別的工作表里的自定義函數(shù)?從菜單插入/函數(shù),類別中的用戶自定義里,可以看到,如果這個自定義函數(shù)不是在當前的工作表里的,函數(shù)會變成——文件名.xls!函數(shù)名了,這樣我們使用上面的自定義函數(shù)就變成=Book1.xls!RangeCount(A1:A10)(設(shè)我們剛才保存文件為Book1)。
怎么樣在任何工作表中使用自定義函數(shù)?自定義了函數(shù)后,每一次使用都要打開這個工作簿,不方便,那么怎么樣讓任何工作簿都能使用這個自定義函數(shù)呢?有兩個方法,第一個就是把代碼寫在上面說到的個人宏工作簿中,因為個人宏工作簿都是隨Excel自動打開的,那么我們就可以通過PERSONAL.XLS!函數(shù)名來使用這個自定義函數(shù)。第二個方法就是加載宏(關(guān)于加載宏的其它用法和具體說明以后還會有專門的一貼),將包含這個自定義函數(shù)的工作簿,去掉無關(guān)的內(nèi)容(不去當然也行啦!)后另存為加載宏(不會不知道怎么另存吧,汗!后注!),這樣在菜單工具/加載宏里,將相關(guān)項前打勾,即可使用該自定義函數(shù),這時使用函數(shù)的方法只要直接用函數(shù)名即可,如=RangeCount(A1:A10)。
最后再說一點大家少遇到的現(xiàn)象:用過VBA后,大家知道在同一模塊中是不能有相同名稱的子程序與函數(shù)的,如果有,運行時會提示存在二義性!但在不同模塊中,卻能有相同甸稱的函數(shù)存在,那么怎么使用這樣的函數(shù)呢?從菜單插入/函數(shù),類別中的用戶自定義里,我們可以看出這樣的函數(shù)變成模塊名.函數(shù)名了,這樣我們的使用方法就是=模塊1.RangeCount(A1:A10)或=模塊2.RangeCount(A1:A10)。
后注:詳細的另存為加載宏的過程,點擊菜單/文件/另存為,在文件類型里選擇Microsoft Excel加載宏項,這時文件夾自動轉(zhuǎn)到保存加載宏的AddIns,再保存即可。
附:上面RangeCount的完整代碼:
Function RangeCount(XRan As Range)
RangeCount = XRan.Count
End Function
下面給出兩個自定義函數(shù),按給顏色求和SumColor與計數(shù)CountColor
Function SumColor(rColor As Range, rSumRange As Range)
Dim rCell As Range
Dim iCol As Integer
Dim vResult
Application.Volatile
iCol = rColor.Interior.ColorIndex
For Each rCell In rSumRange
If rCell.Interior.ColorIndex = iCol Then
vResult = WorksheetFunction.Sum(rCell) + vResult
End If
Next rCell
SumColor = vResult
End Function
Function CountColor(rColor As Range, rSumRange As Range)
Dim rCell As Range
Dim iCol As Integer
Dim vResult
Application.Volatile
iCol = rColor.Interior.ColorIndex
For Each rCell In rSumRange
If rCell.Interior.ColorIndex = iCol Then
vResult = vResult + 1
End If
Next rCell
CountColor = vResult
End Function
我的個性簽名
等級:學(xué)者