2015年8月9日 星期日

[Excel]-Excel巨集-迴圈Do while...Loop-01

[Excel]-Excel巨集-迴圈Do while...Loop-01

       想在Excel中,做一個可重複執行的巨集。目的如下;如下圖1,在cell A1中設定100,在cell A2中設定1,希望做一個指令(巨集),當執行此一巨集時,cell A2將從1變為2、再變為3,一直增加數值,直到等於我們所設定的數值,即100。這樣重複性的功能最適合用巨集來執行了,以下就來練習一下如何用一個迴圈巨集來達成這樣的需求。自己在學習當中,希望大家一同進步,若有錯誤及任何意見,請不吝指教。有些參考網路教學,會盡量標明參考網站,若有侵犯著作請告知。
圖1

第一步:另存檔案成“Excel啟用巨集的活頁簿”。若要執行巨集,必須將Excel另存成可執行具的的檔案格式,如圖2所示,選擇另存檔案→Excel啟用巨集的活頁簿。
圖2
再從存檔類型中,選擇“Excel啟用巨集的活頁簿”,如下圖3。
圖3

第二步:存檔完後,便進入正題了。先在cell A1中輸入100,這是希望要記數的數值。cell B1中輸入setcell A2中輸入1,這是記數的初始值。cell B2中輸入count。如下圖4。
圖4


第三步:插入三個快取圖案,並分別輸入“Start”,“Stop”,“Reset”。這三個按鈕將代表不同的功能,也就是說會有三個不同的巨集要編寫。 
圖5



第四步:建立巨集。點選檢視中的巨集,便會出現如圖6的對話框,
圖6
 接著在巨集名稱中輸入“Start”,並按下建立,這表示按下綠色的Start按鈕便會執行此一巨集程式。
圖7

按下建立後,便會出現編輯巨集的程式編輯框,將來的程式編寫便是在這一編輯框內編寫。

圖8



第五步:規畫程式流程。在巨集編寫之前,先想一下我們需要的動作流程,
1.判斷cell A2小於cell A1
2.cell A2小於cell A1cell A21→再跳回的1
3. cell A2不小於cell A1→停止程式
這三步就是程式運作的主要原理,用圖形表示程式的流程,如下圖9。

圖9


第六步:編寫程式。依下圖編寫程式,我現在先示範Do While...Loop的用法。
1.  Sub Start ()End Sub之間的東西就是這巨集的內容,也就是說一個巨集的開始一定是Sub XXX (),結尾一定是End SubXXX就是巨集名稱。

2.  Dim i As IntegerDim j As Integer:定義ij為整數

3.  i = Cells(1, 1).Value:定義cell A1的值 = i,這樣可以簡化程式的寫法,即要用到cell A1的時候,只要輸入i就可以了。

4.  j= Cells(2, 1).Value:定義cell A2的值 = j

5.  Do While...Loop的用法或基本框架如下:
        
        Do While 條件
                迴圈內容
        Loop

        
    Do While j <= i    迴圈開始條件:j <= i

       
        j = j + 1      迴圈內容:每執行一次迴圈,j的值就增加1
                          直到j的值小於或等於i的值
   
    Loop            迴圈結束

圖10

第七步:單步執行程式。程式初步寫好,先用單步執行來確認程式是否可正常動作。在偵錯選項中選擇逐行,或是直接按F8也可以。
圖11


按第一次F8,可以看到程式中第一航變成黃色了,這表示現在正在執行這一行。如下圖12。
圖12


按第二次F8
圖13


按第三次F8
圖14


按第四次F8
圖15


按第五次F8
圖16


按第六次F8
圖17


按第七次F8
圖18


按第八次F8

圖19

按第九次F8
圖20


此時,將滑鼠游標移到下圖21的紅色圓圈處,最左邊的j上面,會出現一個“j = 3”,這就是現在j的值,即cell A2的值。
圖21


接著再按下多次F8,並將滑鼠游標移到下圖22的紅色圓圈處,最左邊的j上面,會出現一個“j=26”,這就是現在j的值,即cell A2的值。但奇怪的是在Excel頁面上的Cell A2仍然顯示1。這表示程式可能有些問題。
圖22

圖23

第八步:程式修改。想一下為何實際上cell A2的值不會變化?因為迴圈中j的值有一值累加,但是每累加一次就必須將j的值再帶入cell A2,這樣才會顯示在Excel中。所以流程圖及程式修改如下。

圖24


程式修改部分:將 j = Cells(2, 1).Value由迴圈外部移到迴圈內部。
再次單步執行,驗證程式。按了多次F8,會發現j的值只會在12之間變化,如下圖25及圖26。

圖25
圖26

第九步:程式修改。將 j = Cells(2, 1).Value改成Cells(2, 1).Value = j。如此一來 Cell A2的值可以正常的累加到100了。在回到Excel中直接用滑鼠點選綠色的“Start”,就會看到Cell A2的值從1一值增加到100。
圖27
圖28
圖29


後記,整個巨集的寫法也可以畫簡為以下,也可以達成相同功能。

圖30



沒有留言:

張貼留言