[VBA]大小編號自動編碼
有時候編號會有階層,大階層編號+小階層編號如何判斷編號的起終點是最關鍵的地方
步驟
自動編號的部分分為兩個部分來做,首先先將大項(1)、(2)……自動編碼,然後再針對(1)、(2)與(2)、(3)……之間的小項目編碼。
大項目編碼
針對大項目編碼可以參考項次編碼的方式來處理,但這次的設定上有括號,所以增加了NumberFormatLocal來定義儲存格格式。
1'起始編號,一般從0開始2p3 = 13'設定開始執行自動編碼的列數,可自行修正,因為Do迴圈的關係這邊一定要先輸入一個值4prw2 = 7 5Do While prw2 <= r6 If Cells(prw2, 2).HorizontalAlignment = xlLeft And Cells(prw2, 2).Font.Bold = True Then7 '顯示會有括號,但是儲存格仍為數字8 Cells(prw2, 1).NumberFormatLocal = "(G/通用格式)"9 Cells(prw2, 1).Value = p310 p3 = p3 + 111 End If12prw2 = prw2 + 113Loop接著就可以利用大項目編碼作為小項目的執行邊界。
小項目編碼
小項目介於大項目編碼與大項目編碼之間,所以利用這個特性抓取迴圈的起終點,例如在(1)、(2)與(2)、(3)……等大項目之間的小項目從1開始自動編號,基於此可利用兩個if來判斷。因為大項目的排列由小而大,利用這個特性採用下列判斷式抓取起終點。
xxxxxxxxxx131 prw1 = 72 prs = 13 pre = 14 p1 = 15 p2 = 26Do While prw1 <= r7 '當儲存格等於1且字體為粗體的時候,將prs就等於當下的列數prw18 If Cells(prw1, 1).Value = p1 And Cells(prw1, 1).Font.Bold = True Then9 prs = prw110 End If11 '當儲存格等於2且字體為粗體的時候,將pre就等於當下的列數prw112 If Cells(prw1, 1).Value = p2 And Cells(prw1, 1).Font.Bold = True Then13 pre = prw1利用上述方程式可以得到起點prs及終點pre分別代表的列數,之後就能做迴圈來自動編碼小項目
xxxxxxxxxx121xc2 = 12'判斷是否為小項目,是的話就填入值,起始值為1。正確填入的話就+13For q1 = prs To pre4 If Cells(q1, 2).HorizontalAlignment = xlLeft And Cells(q1, 2).Value <> "" And Cells(q1, 2).Font.Bold <> True Then5 Cells(q1, 1).Value = xc26 xc2 = xc2 + 17 End If8 Next9'第一組邊界抓完之後將原起點改為原終點,然後將p2+1作為抓取下一個邊界的終點10 prs = pre11 p2 = p2 + 112end if當迴圈執行到最後一行,通常是小項目的最後一行,沒辦法透過大項目定位終點的行數,所以這邊單獨拿出來再寫一個
xxxxxxxxxx151'當prw1=最後一行的時候,自動將最後一行視為pre(終點)2If prw1 = r Then3 pre = prw14For q1 = prs To pre5 If Cells(q1, 2).HorizontalAlignment = xlLeft And Cells(q1, 2).Value <> "" And Cells(q1, 2).Font.Bold <> True Then6 Cells(q1, 1).Value = xc27 xc2 = xc2 + 18 End If9 Loop10 End If11'在最大的迴圈增加xc2=1,讓每次小迴圈的xc2都能從1開始12xc2 = 113'DO迴圈的增加數量,判斷儲存格用FOR迴圈就不用這一行14prw1 = prw1 + 115Loop

沒有留言:
張貼留言