[VBA]自動項次編號
工作的時候需要對於工項編碼,但是工項不是連續的所以沒辦法一次往下拉自動填入完成,這個時候就是用DO迴圈來做就很方便。
程式碼說明
x
1'自動抓取第6行非空白列之列數
2r = Cells(ActiveSheet.Rows.Count, 6).End(xlUp).Row
3'設定編號的起始值
4xc2 = 1
5'設定列數判斷的起始值
6xc1 = 5
7
8Do Until xc1 = r
9 If Cells(xc1, 2).HorizontalAlignment = xlLeft And Cells(xc1, 2) <> "" Then
10 Cells(xc1, 1).Value = xc2
11 xc2 = xc2 + 1
12 End If
13 xc1 = xc1 + 1
14Loop
xc1
不一定要從1開始,因為最上列通常為表格標題或說明,但就算設成1也不會有影響。- 利用項目的性質判斷是否編碼,要編碼的工項有
對齊向左
及非空白
這兩種性質,所以利用.HorizontalAlignment = xlLeft
及<> ""
來作為判斷式。 - 假設以上條件成立,則位置
(xc1,1)
的值為xc2
,編碼起始值為1。成功填寫之後要記得讓xc2+1
,數列才會變成1、2、3……
,如果+2會變成1、3、5、7……
以此類推,不一定要整數,小數也是可以。 - Do迴圈沒有預設前進的值,也就是說如果沒寫
xc1 = xc1 + 1
這行,xc1永遠不會變成r,就會造成無限迴圈的情況,一般判斷行列數都建議使用for迴圈比較方便。
沒有留言:
張貼留言