讀古今文學網 > 別怕,ExcelVBA其實很簡單 > 3.9 自定義函數,Function過程 >

3.9 自定義函數,Function過程

Function過程也稱為函數過程。編寫一個Function過程,就編寫了一個函數。

函數可以完成很多複雜的計算。如想求A列的和,可以用SUM函數;想知道A列有多少個「張三」,可以用COUNTIF函數。

Excel並沒有提供解決這個問題的工作表函數。這時,可以根據需要自己編寫一個。

3.9.1 試寫一個函數

Function過程同Sub過程一樣,都是保存在模塊裡,所以,在編寫函數前,應先插入一個模塊(參閱第2章2.4.1小節)來保存它。

插入模塊後,雙擊模塊激活它的【代碼窗口】,即可開始編寫函數。

如果想讓函數生成一個1~10之間的隨機整數,完整的程序為:

3.9.2 使用自定義函數

自定義的函數可以在工作表中使用,也可以在VBA過程裡使用。

在工作表中使用自定義函數

在工作表中使用自定義函數同使用工作表函數類似,如圖3-45所示。

圖3-45 在工作表中使用自定義函數

自定義的函數可以在【插入函數】對話框裡找到,如圖3-46所示。

圖3-46 查看自定義函數

自定義的函數可以和其他函數嵌套使用,如圖3-47所示。

如:

圖3-47 嵌套使用自定義函數

在VBA過程中使用自定義函數

在VBA中使用自定函數與使用VBA的內置函數一樣,如圖3-48所示。

圖3-48 在VBA中使用自定義函數

3.9.3 怎麼統計指定顏色的單元格個數

問題一:單元格是什麼顏色

在Excel裡,可以通過RGB函數指定不同的顏色,如想將活動工作表中B1單元格的底紋設置為黃色,代碼為:

怎麼統計指定顏色的單元格個數

要知道A1:A10里有少個黃色單元格,可以讓VBA替我們數一下,是黃色的累計,不是黃色的排除。

在工作表裡輸入函數,可以看到函數返回的計算結果,如圖3-49所示。

圖3-49 統計黃色單元格的個數

還可以通過顏色索引號來引用某個顏色,在Excel 2003中,默認情況下,黃色的顏色索引號為6,所以上面的代碼還可以寫為:

ColorIndex屬性引用的是某個索引號上的顏色,而Color返回的是真實顏色。因為顏色的索引號可以更改,所以使用ColorIndex屬性引用到的顏色不一定都相同,因此函數不一定能返回正確的結果。

用參數指定計算區域

在工作表中使用函數時,可以通過函數參數指定計算統計的單元格區域。自定義函數也可以使用參數。

如果需要統計的單元格區域不是固定的,可以用變量代替程序裡的A1:A10單元格區域,讓用戶在使用自定義函數時通過函數參數指定區域。

為函數設置參數後,如果要統計A1:C10中黃色底紋單元格的個數,輸入公式「=count color(A1:C10)」 即可,如圖3-50所示。

圖3-50 使用參數的自定義函數

給自定義函數指定第2參數

還可以給函數設置第2參數,通過第2參數指定要統計的顏色。

在工作表中使用自定義的函數,如圖3-51所示。

圖3-51 用參數指定需要統計的顏色

如果需要,還可以為函數添加第3參數,第4參數……

設置自定義函數為易失性函數

有時,當工作表重新計算之後,自定義函數並不會重新計算。如在工作表中使用第3章3.9.1小節中生成隨機的自定義函數後,按F9鍵重算工作表,函數並不會生成新的隨機值。

但如果在函數開始添加一條語句,添加語句後,無論何時重新計算工作表,函數都會重新計算,得到新的結果。

注意:使用Application. Volatile True語句是將自定義函數聲明為易失性函數。當工作表發生重算後,易失性函數會重新計算函數的值。但因為更改單元格的背景顏色不會讓工作表重算,所以,無論是否使用該語句,更改單元格的顏色後,本節中編寫的自定義函數CountColor都不會重新計算。

3.9.4 聲明函數過程,規範的語句

聲明Function過程的語句和聲明Sub過程的語句類似。同Sub過程一樣,Function函數也分公共函數和私有函數,如果想聲明一個私有函數,請一定要加上Private關鍵字。