首頁 > 軟體

EXCEL自定義函數

2019-12-07 20:00:37
在工作中有時會遇到在編寫公式時,找不到適合的EXCEL內建函數,或者雖然可以使用內建函數,但會造成公式複雜不易理解,這時就可以考慮使用自定義函數了。
編寫自定義函數需要一定的VBA基礎,但完成後,就可以像使用內建函數一樣方便了,任何人都可以使用。

1

下面通過一個例子來學習簡單的編寫自定義函數

2

例:下面表格中需要計算一些三角形的面積

3


B列是底邊長,C列是高,要求在D列通過公式計算三角形面積。

4

(通常我們會在D3單元格用公式 =B3*C3/2 來計算,然後把這個公式向D列下方拖動複製,得到其他公式。這只是一個簡單的例子,通過它來學習編寫簡單的自定義函數)

5

1、開啟VBA視窗
按ALT+F11調出VBA視窗,插入一個使用者模組。

6

2、編寫程式碼
通常自定義函數是用function命令開始的,在這個命令後面給它指定一個名字和引數
把下面這個自定義函數程式碼貼上到剛插入的使用者模組中就可以使用了。
Function sjxmj(di, gao)
sjxmj = di * gao / 2
End Function

這段程式碼非常簡單只有三行,先看第一行,其中sjxmj是自己取的函數名字,括號中的是引數,也就是變數,di表示「底邊長」,gao表示「高」,兩個引數用逗號隔開。
再看第二行,這是計算過程,將di*gao/2這個公式賦值給sjxmj,即自定義函數的名字。
再看第三行,它是與第一行成對出現的,當你手工輸入第一行的時候,第三行的end function就會自動出現,表示自定義函數的結束。


7

3、使用自定義函數
回到EXCEL視窗,我們在D3單元格中輸入公式 =sjxmj(b3,c3) ,就會得到這一行的三角形面積了,它的使用方法同內建函數完全一樣。

8

通過上面例子可以了解自定義函數的編寫和使用方法,下面再介紹一個稍微複雜點的自定義函數。經常對資料進行處理的朋友可以會遇到多條件查詢某一個資料,一般這種情況需要編寫「陣列公式」來解決,公式較長,也不易理解。比如下面統計成績的表格,需要根據A1:D7的成績表,統計出兩門功能都在90分以上的學生人數。大家可以看到在H3單元格中的公式比較長,理解起來也有一定難度。我們通過自定義函數也可以得到正確結果,函數程式碼如下:Function 統計(a, b, c, d, e) For i = 1 To a.Rows.Count If b = a.Cells(i, 1) And a.Cells(i, c) >= e And a.Cell
s(i, d) >= e Then 統計 = 統計 + 1 End If NextEnd Function這個函數用了五個引數(因為涉及到一個區域和四個條件)引數a表示要統計的區域,在此例中為B2:E7引數b表示要統計的是哪一個班級,在此例中為G3單元格引數c表示數學成績相對於區域第一列向右的列數,在此例中為3引數d表示數學成績相對於區域第一列向右的列數,在此例中為4引數e表示分數,在此例中為90分提示:要注意引數c和d「相對」於「區域」的列數,並非是從A列開始向右的列數。把上面這段程式碼也貼上到使用者模組中就可以使用了回到EXCEL視窗,在H3單元格中輸入公式 =統計($B$2:$E$7,G3,3,4,90) 就可以顯示正確結果了。Function 統計2(a, b)For i = 1 To a.Rows.CountIf b = a.Cells(i, 1) And a.Cells(i, 3) >= 90 And a.Cells(i, 4) >= 90 Then統計 = 統計 + 1End IfNextEnd Function在表格中的H3單元格中輸入公式 =統計2($B$2:$E$7,G3) 就可以了。從上面可以看出,自定義函數可以使用「漢字」做為函數的名字,方便記憶,也可以根據實際情況對引數進行簡化。
表示要統計的是哪一個班級,在此例中為G3單元格引數c表示數學成績相對於區域第一列向右的列數,在此例中為3引數d表示數學成績相對於區域第一列向右的列數,在此例中為4引數e表示分數,在此例中為90分提示:要注意引數c和d「相對」於「區域」的列數,並非是從A列開始向右的列數。把上面這段程式碼也貼上到使用者模組中就可以使用了回到EXCEL視窗,在H3單元格中輸入公式 =統計($B$2:$E$7,G3,3,4,90) 就可以顯示正確結果了。Function 統計2(a, b)For i = 1 To a.Rows.CountIf b = a.Cells(i, 1) And a.Cells(i, 3) >= 90 And a.Cells(i, 4) >= 90 Then統計 = 統計 + 1End IfNextEnd Function在表格中的H3單元格中輸入公式 =統計2($B$2:$E$7,G3) 就可以了。從上面可以看出,自定義函數可以使用「漢字」做為函數的名字,方便記憶,也可以根據實際情況對引數進行簡化。

9


通常這種時候需要在H3單元格使用陣列公式 =SUM(IF(($B$2:$B$7=G3)*($D$2:$D$7>=90)*($E$2:$E$7>=90),1,0))

10


提示:
如果我們的成績表格式是固定的,各科目成績位置相對於區域也是固定的,而且要統計的分數也是固定的90分,就可以在自定義函數中將引數的數量減少到兩個,如下:


IT145.com E-mail:sddin#qq.com