請問VBA 巨集 寫法
請問如何將 XLS 用 VBA 巨集 寫法 重新將序號編碼不跳號
A1601002
A1601004
A1601004
A1601006
A1601006
A1601007
VBA重新編碼為
A1601001
A1601002
A1601002
A1601003
A1601003
A1601004
說明  序號往前遞補不空號,
如第一筆後三碼002 自動編為後三碼001
如第二筆後三碼004 自動編為後三碼002
如第二筆後三碼004 自動編為後三碼002
乍看以為是 two level break
其實只有一層 break
Option Explicit
Dim bRun As Boolean
Dim sGroup, sKey As String
Dim iIndex As Integer
Sub Main()
    '設定初值
    bRun = True
    sGroup = ""
    sKey = ""
    iIndex = 0
    '主迴圈,從 A1 開始往下
    Range("A1").Select
    Do While bRun
        sKey = ActiveCell.Value
        If (sKey <> sGroup) Then    '項次變動
            If (Left(sKey, 7) <> Left(sGroup, 7)) Then   '日期變動,重設 index 值
                iIndex = 1
            Else
                iIndex = iIndex + 1
            End If
            ActiveCell.Offset(0, 5).Value = Left(sKey, 7) & Format(iIndex, "000")
        Else
            ActiveCell.Offset(0, 5).Value = Left(sKey, 7) & Format(iIndex, "000")
        End If
        sGroup = sKey
        '下一筆
        ActiveCell.Offset(1, 0).Select
        '如果沒值就結束執行
        If IsEmpty(ActiveCell.Value) Then
            bRun = False
        End If
    Loop
    MsgBox "Done", vbInformation
End Sub
                沒有做出 VBA 倒是試出了 Excel 公式
B1公式 =VALUE(RIGHT(A1,3))
C1公式 =SUMPRODUCT((B$1:B$6<B1)*(1/COUNTIF(B$1:B$6,B$1:B$6)))+1
D1公式 =LEFT(A1,5)&TEXT(C1,"000")
非常感謝您的幫忙>>(我想好久不知如何做起)
我在測試時發現 C1  公式  改為B$1:B$20 沒問題>>超過20筆以上 #DIV/0!
PS: 資料可能是1-3萬筆或以上~~不知是否有方法可以抓取 B:B
謝謝
1-3萬筆阿,那規則呢?
目前我只取後面三位,所以只能排999筆~
=SUMPRODUCT((B$1:B$29<B1)*(1/COUNTIF(B$1:B$29,B$1:B$29)))+1
這三個地方要對應資料筆數,出現 #DIV/0! 應該是 B欄內有空白。
我自己測試999筆要跑很久,不過還是跑得出來,幾萬筆可能就真的要寫 VBA 了XD
例:一筆單頭 W160101001 (W單別 16年01月01日001流水號)單身會有多筆 W160101001 項次001~到xxx
因單據有跳號所以要往前遞補缺號 (一個月單身可能有1-3萬筆)
PS:(每日流水號多重001開始至xxx)
原編號	項次		VBA重新編碼為	項次
A160101002	001		A160101001	001
A160101004	001		A160101002	001
A160101004	002		A160101002	002
A160101006	001		A160101003	001
A160101006	002		A160101003	002
A160101007	001		A160101004	001
…..			…….	
A160131003	001		A160131001	001
A160131005	001		A160131002	001
A160131005	002		A160131002	002
A160131006	001		A160131003	001
A160131006	002		A160131003	002
A160131008	001		A160131004	001
以上說明-