[VBA]用一個簡單例子說明如何在Excel中自定義函數


Excel中的函數無疑是強大的,但是再強大的戰士也有他脆弱的腳后跟[1]。這兩天在使用Excel的時候遇到了一個需求,要在某一個單元格里面自動計算今天是星期幾(如顯示 Today is Tuesday)。本來以為Excel會有相應的函數,但是找來找去也沒有找到,只有WEEKDAY可以返回今天是本周的第幾天,是個數字。於是寫下了一個奇怪的公式 ="Today is "& WEEKDAY(TODAY(),2),計算結果是”Today is 2”。

這可真夠2的!

遇到問題就要想辦法解決,這次出手相救的是Excel的自定義函數功能,使用到的是老不死的VBA,看懂下面的內容要點兒編程知識。

Office 2010版及以后要在工具欄里面找到VBA(或稱宏)比較點兒曲折,但使用快捷鍵Alt+F11能夠直接調出VBA窗口,然后插入模塊,就可以自定義函數了。

所謂的自定義函數其實就是寫一個函數程序,比如上面提到的例子,我們可以寫一個WEEKDAYNAME函數將WEEKDAY返回的值做進一步的轉換:1轉換成Moday,2轉換成Tueday……直到7轉換成Sunday。

這是一個很簡單的函數,VB代碼如下:

Function WEEKDAYNAME(W As Integer) As String
 Select Case W
    Case 1
        WEEKDAYNAME = "Monday"
    Case 2
        WEEKDAYNAME = "Tuesday"
    Case 3
        WEEKDAYNAME = "Wednesday"
    Case 4
        WEEKDAYNAME = "Thursday"
    Case 5
        WEEKDAYNAME = "Friday"
    Case 6
        WEEKDAYNAME = "Saturday"
    Case 7
        WEEKDAYNAME = "Sunday"
 End Select
End Function

函數代碼寫完以后,關閉VBA窗口,使用剛才自定義的WEEKDAYNAME函數在Excel單元格里面重寫公式 ="Today is "&WEEKDAYNAME(WEEKDAY(TODAY(),2)),計算結果是“Today is Tuesday”,實現了最初的設想。

-----

注:圖片來源於網絡。

[1] 阿喀琉斯之踵

-----

版權聲明:本文由@我只是一小小鳥創作,采用“知識共享 署名-非商業性使用-禁止演繹 3.0 中國大陸 許可協議”進行許可。除非注明,均為原創文章,轉載請注明:轉載自這只是一小小鳥窩。本文地址: http://blog.sina.com.cn/s/blog_638f98570101fbqn.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM