一般程式設計時,多多少少都會用到流程控制,不外乎就是for、while、loop等,而這些在VBA上也都有,但是在Excel工作表中,如何有效的控制流程,如何讓程式知道找到哪個資料列截止?這個就要靠Range("A65535").End(xlUp).Row的方式來取得資料欄裡最後一列的位置,來達到控制的效果。
例如我們有兩欄資料,分別為姓名與血型,今天我要批次取出姓陳的人員所有的血型,以程式來撰寫時,該如何寫呢?
由於姓名資料在A欄,所以用Range("A65535").End(xlUp).Row程式,由下往上取得最後一列的位置,並以For的迴圈方式,由第2列開始檢查,用Left(Range("A" & i), 1) = "陳" 來檢查是否左邊第一個字元為陳,如果是的話,就印出資料到即時運算視窗,一直到最後一列結束檢查。有.End(xlUp).Row 方法,相信有人會問,怎麼不要由上往下Range("A1").End(xlDown).Row的方式來處理呢?這是有原因的,因為如果中間有空白資料,就會停止,由最後資料開始找,會保險些。
Sub Day2_迴圈控制()
For i = 2 To Range("A65535").End(xlUp).Row
If Left(Range("A" & i), 1) = "陳" Then
Debug.Print Range("A" & i) & ":" & Range("B" & i)
End If
Next
End Sub
這裡還要提到Debug.Print這個方式,會在VBE的即時運算視窗印出資料,這在除錯上很有幫助,若該視窗沒有開啟,請於VBE內按下Ctrl+G開啟。
知道如何控制後,有許多的需求均可用到該方式處理,例如vlookup無法辦到帶出範圍值的前一欄資料,就可以用這方式來取代,帶出的資料還可以透過程式來處理,呈現方式可更多樣化。
又例如兩個工作表有重疊資料,可透過兩個for迴圈來檢測重複項目與非重複項目各有哪些,最終整理到第三個工作表上參考。
以上蜻蜓點水的帶過,希望能激起各位的想像空間,明天來討論的是更多用途的For Each...Next 陳述式以及套用模糊搜尋。