VBA-JC第7節(jié)|過程與函數(shù)

最近更新:'2019-05-14'

  1. 子過程與模塊化程序設(shè)計(jì)
  2. 函數(shù)設(shè)計(jì)斑举、自定義公式

1. 子過程與模塊化程序設(shè)計(jì)

1. 1案例1:計(jì)算每張成績(jī)表的C2單元格數(shù)字

將工作表張三,李四,王五,趙六各科的成績(jī)求和分別匯總到對(duì)應(yīng)工作表的C2單元格



相關(guān)的代碼如下:

Sub sumAll()
    Dim i, j, s
    Dim w1 As Worksheet
    For i = 1 To Worksheets.Count
        Set w1 = Worksheets(i)
        s = 0
        For j = 2 To 10
            s = s + w1.Cells(j, 2)
        Next j
        w1.Cells(2, 3) = s
    Next i
    
End Sub

代碼最終的結(jié)果如下圖所示:


1. 2案例2:導(dǎo)入總分榜

將張三,李四,王五,趙六的工作表的C2,B2單元格分別匯總到總分榜工作表,具體如下截圖


相關(guān)的代碼如下:


Sub allscore()
    Dim wPerson As Worksheet, wAll As Worksheet, i, k
    Set wAll = Worksheets("總分榜")
    k = 2
    For i = 1 To Worksheets.Count
        Set wPerson = Worksheets(i)
        If wPerson.name <> "總分榜" Then
            wAll.Cells(k, 1) = wPerson.Cells(1, 2)
            wAll.Cells(k, 2) = wPerson.Cells(2, 3)
            k = k + 1
        End If
    Next i
End Sub

1. 3案例1和案例2的合并:計(jì)算每張成績(jī)表的C2單元格數(shù)字,導(dǎo)入總分榜

以下是使用不同的方法,但是結(jié)果是一樣的

1. 3.1方案1
Sub allscore()
    
    Dim i, k, j, s
    Dim wPerson As Worksheet, wAll As Worksheet
    
    Set wAll = Worksheets("總分榜")
    k = 2
    
    For i = 1 To Worksheets.Count
        Set wPerson = Worksheets(i)
        s = 0
        For j = 2 To 10
            s = s + wPerson.Cells(j, 2)
        Next j
        wPerson.Cells(2, 3) = s
        If wPerson.name <> "總分榜" Then
            wAll.Cells(k, 1) = wPerson.Cells(1, 2)
            wAll.Cells(k, 2) = wPerson.Cells(2, 3)
                
            k = k + 1
        End If
    
    Next i
    
End Sub
1. 3.2方案2

使用call調(diào)用函數(shù)

Sub sumAll()
    Dim i, j, s
    Dim w1 As Worksheet
    For i = 1 To Worksheets.Count
        Set w1 = Worksheets(i)
        s = 0
        For j = 2 To 10
            s = s + w1.Cells(j, 2)
        Next j
        w1.Cells(2, 3) = s
    Next i
    
End Sub

Sub allscore()
    Dim wPerson As Worksheet, wAll As Worksheet, i, k
    
    Call sumAll
    
    Set wAll = Worksheets("總分榜")
    k = 2
    For i = 1 To Worksheets.Count
        Set wPerson = Worksheets(i)
        If wPerson.name <> "總分榜" Then
            wAll.Cells(k, 1) = wPerson.Cells(1, 2)
            wAll.Cells(k, 2) = wPerson.Cells(2, 3)
            k = k + 1
        End If
    Next i
End Sub

call調(diào)用函數(shù)的使用,具體可以參見如下截圖:


1. 3.3方案3
Option Explicit
Sub 匯總及登記()

 Call sumAll
 Call allscore
 
End Sub

Sub sumAll()
    Dim i, j, s
    Dim w1 As Worksheet
    For i = 1 To Worksheets.Count
        Set w1 = Worksheets(i)
        s = 0
        For j = 2 To 10
            s = s + w1.Cells(j, 2)
        Next j
        w1.Cells(2, 3) = s
    Next i
    
End Sub

Sub allscore()
    Dim wPerson As Worksheet, wAll As Worksheet, i, k
    
    Set wAll = Worksheets("總分榜")
    k = 2
    For i = 1 To Worksheets.Count
        Set wPerson = Worksheets(i)
        If wPerson.name <> "總分榜" Then
            wAll.Cells(k, 1) = wPerson.Cells(1, 2)
            wAll.Cells(k, 2) = wPerson.Cells(2, 3)
            k = k + 1
        End If
    Next i
End Sub

1.4過程調(diào)用

1.4.1過程概念

什么叫過程呢?是一段代碼,有開頭和結(jié)尾并且有自己的名字.


一般會(huì)任務(wù)sub...end sub叫做宏,但是從代碼的角度看,宏就是用VBA編寫的一個(gè)過程赚瘦。

1.4.2使用過程的優(yōu)點(diǎn)

如果程序比較復(fù)雜的話,使用宏會(huì)非常的方便,具體優(yōu)點(diǎn)如下:
1.代碼清晰,易于維護(hù)
2.靈活擴(kuò)展车摄,輕松修改

  • 運(yùn)用了子過程調(diào)用寺谤,可以靈活的修改功能。
  • 沒有使用子過程吮播,只能笨拙的復(fù)制粘貼变屁,沒有靈活性!
  1. 代碼重用意狠,提高效率
    把可能被多次使用的代碼粟关,寫成過程供其他程序調(diào)用!

注意事項(xiàng):
1.調(diào)用過程的時(shí)候,可以把call忽略,直接寫過程的名稱即可.


2.函數(shù)設(shè)計(jì)环戈、自定義公式

函數(shù):過程的一種在執(zhí)行結(jié)束后能將運(yùn)行結(jié)果返回給調(diào)用者

2.1 案例1:根據(jù)特征指數(shù),進(jìn)行分類

Function 客戶分類(score)
    
    Dim level

    If score < 30 Then
        level = "甲型"
    ElseIf score < 60 Then
        level = "乙型"
    ElseIf score < 90 Then
        level = "丙型"
    Else
        level = "丁型"
    End If
    
    客戶分類 = level
    
End Function

Sub 暴力傾向分析()

    Dim i, score, level
    
    i = 3
    
    Do While Cells(i, 3)
    
        score = Cells(i, 3)
        
        level = 客戶分類(score)
        
        Cells(i, 4) = level
        
        i = i + 1
        
    Loop
  
End Sub


2.2案例2:函數(shù)開發(fā)表格公式

通過函數(shù)開發(fā)自己的表格公式,比如,在D3單元格中直接寫"=客戶分類(C3)",就會(huì)根據(jù)C3單元格的分?jǐn)?shù)直接顯示"乙型"


注意事項(xiàng):
1.不同過程中定義的變量闷板,即使同名也互相無(wú)關(guān)
2.子程序(Sub)也可以使用參數(shù),用法與函數(shù)完全相同院塞。
3.參數(shù)可以有多個(gè)遮晚,每個(gè)之間用逗號(hào)隔開。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拦止,一起剝皮案震驚了整個(gè)濱河市县遣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌汹族,老刑警劉巖萧求,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異顶瞒,居然都是意外死亡夸政,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門榴徐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來守问,“玉大人,你說我怎么就攤上這事箕速±业猓” “怎么了朋譬?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵盐茎,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我徙赢,道長(zhǎng)字柠,這世上最難降的妖魔是什么探越? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮窑业,結(jié)果婚禮上钦幔,老公的妹妹穿的比我還像新娘。我一直安慰自己常柄,他們只是感情好鲤氢,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著西潘,像睡著了一般卷玉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上喷市,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天棋嘲,我揣著相機(jī)與錄音正勒,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛辉哥,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播感憾,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼回右,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了植酥?” 一聲冷哼從身側(cè)響起别渔,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎惧互,沒想到半個(gè)月后哎媚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡喊儡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年拨与,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片艾猜。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡买喧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出匆赃,到底是詐尸還是另有隱情淤毛,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布算柳,位于F島的核電站低淡,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蔗蹋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一何荚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧猪杭,春花似錦餐塘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至蜂筹,卻和暖如春稠鼻,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背狂票。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工候齿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人闺属。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓慌盯,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親掂器。 傳聞我的和親對(duì)象是個(gè)殘疾皇子亚皂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說閱讀 10,869評(píng)論 6 13
  • VBA訂制工具欄 http://club.excelhome.net/thread-1047254-1-1.htm...
    大海一滴寫字的地方閱讀 2,239評(píng)論 0 0
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,089評(píng)論 1 32
  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程,因...
    小菜c閱讀 6,358評(píng)論 0 17
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 3,791評(píng)論 0 11