返回列表 上一主題 發帖

[發問] VBA計算箱子號碼

[發問] VBA計算箱子號碼

本帖最後由 john2006168 於 2021-4-22 11:59 編輯

請問有沒有老師可以幫忙寫一下,學習一下不同的思路?
想要黃色的結果
revised plt4
PLT NO.        4        40        C1-C40        C

擷取.PNG (7.19 KB)

擷取.PNG

TEST VBA1.zip (11.02 KB)

回復 1# john2006168


不好意思,看不太懂解規則是什麼,可否請再細說明一下,謝謝

TOP

回復 2# samwang
考慮條件E欄是順序P和C的,如果是P板,第一板是10件,編紙箱號碼就用P1-P10,第二板20件,就用P11-P30,以此類推.,如果是C板,第一板是10件,編紙箱號碼就用C1-C10,第二板20件,就用C11-C30,以此類推.

TOP

回復 3# john2006168

請測試看看,謝謝。

Sub test()
Dim Arr, xD, TT, T, T1, T2, T3, N%, i&
Set xD = CreateObject("Scripting.Dictionary")
Arr = [A1].CurrentRegion
For i = 2 To UBound(Arr)
    T = Arr(i, 5): T2 = Arr(i, 2): T3 = Arr(i, 3)
    If xD.Exists(T & "") Then
        If N = 0 Then
            N = 1: TT = xD(T & "")(0)
        Else
            TT = xD(T & "")(0) + T1
        End If
        Arr(i, 1) = Arr(i, 5) & TT & "1" & "-" & T & T3 + xD(T & "")(1)
        xD(T & "") = Array(T2, T3 + xD(T & "")(1))
    Else
        Arr(i, 1) = Arr(i, 5) & "1" & "-" & T & T3
        xD(T & "") = Array(T2, T3): N = 0: T1 = xD(T & "")(0)
    End If
Next
Arr(1, 1) = "Carton"
Range("D1").Resize(UBound(Arr), 1) = Arr
End Sub

TOP

回復 4# samwang

謝謝老師.這個可以,感謝抽時間回覆,但是看得不是很懂.如果有注解會更好點.
另外,請問有沒有其他大大,可以提供其他寫法(不用UBound 函數)

TOP

回復 5# john2006168

我盡力加入註解,可能有些寫得不好不詳細,請您自行研究了,謝謝。

Sub test1()
Dim Arr, xD, TT, T, T1, T2, T3, N%, i&
Set xD = CreateObject("Scripting.Dictionary")
Arr = [A1].CurrentRegion   '資料放入數組
For i = 2 To UBound(Arr)
    'T:E欄資料、T2:B欄、T3:C欄
    T = Arr(i, 5): T2 = Arr(i, 2): T3 = Arr(i, 3)
    If xD.Exists(T & "") Then '字典有無E欄資料
        If N = 0 Then
            N = 1: TT = xD(T & "")(0) '重複出現的第1次依規則編號(第2碼)
        Else
            TT = xD(T & "")(0) + T1 '重複出現的第2次以上依規則編號(第2碼)
        End If
        Arr(i, 1) = Arr(i, 5) & TT & "1" & "-" & T & T3 + xD(T & "")(1) '依規則編號
        xD(T & "") = Array(T2, T3 + xD(T & "")(1)) 'C欄(kg)累加裝入字典
    Else
        Arr(i, 1) = Arr(i, 5) & "1" & "-" & T & T3  '第1次出現,依規則編號放入Arr
        xD(T & "") = Array(T2, T3): N = 0: T1 = xD(T & "")(0) 'B,C欄資料放入字典,T1設為B欄第一次出現數值,N=0歸零(P-C)
    End If
Next
Arr(1, 1) = "Carton"
Range("d1").Resize(UBound(Arr), 1) = Arr
End Sub

TOP

回復 6# samwang


   不好意思,如果加資料去到第5行,數字不對.應該是P61-P90

擷取.PNG (12.38 KB)

擷取.PNG

TOP

回復 7# john2006168


請問PXX - 的規則如何??

TOP

回復 8# samwang

是件數,要累加.

TOP

回復 9# john2006168

我再將excel給您看一下

TEST VBA1 (2).zip (13.41 KB)

TOP

        靜思自在 : 要比誰更受誰.不要比誰更怕誰。
返回列表 上一主題