iT邦幫忙

DAY 2
6

Excel VBA 的眉眉角角系列 第 2

Excel VBA 的眉眉角角Day2:關於流程控制與儲存格的關係

一般程式設計時,多多少少都會用到流程控制,不外乎就是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 陳述式以及套用模糊搜尋。


上一篇
Excel VBA 的眉眉角角Day1:為何選擇VBA?
下一篇
Excel VBA 的眉眉角角Day3: For Each...Next 陳述式與模糊搜尋
系列文
Excel VBA 的眉眉角角30

尚未有邦友留言

立即登入留言