Tôi đã nghiên cứu 1 Code đánh số phiếu tự động như sau:
Chạy khá ổn định nhưng tôi vẫn lăn tăn 1 chút cần các bác góp ý
1. Làm cách nào để đưa 2 số cuối của cột D, tức là số năm (2019 lấy 19) gán vào số phiếu
2. Đồng thời mỗi năm số phiếu lại reset lại từ 1 trở đi
Đang trăn trở nhất nhiều, bác nào có thể góp ý để tôi khắc phục được không ?
Chạy khá ổn định nhưng tôi vẫn lăn tăn 1 chút cần các bác góp ý
1. Làm cách nào để đưa 2 số cuối của cột D, tức là số năm (2019 lấy 19) gán vào số phiếu
2. Đồng thời mỗi năm số phiếu lại reset lại từ 1 trở đi
Đang trăn trở nhất nhiều, bác nào có thể góp ý để tôi khắc phục được không ?
Sub SO_phieu()
Dim arr, i As Long, lR As Long, kq, so As Long, Dic As Object, dk As String, dks As String
Set Dic = CreateObject("scripting.dictionary")
With Sheets("NKC")
lR = .Range("P" & Rows.Count).End(xlUp).Row
arr = .Range("C5:R" & lR).Value
ReDim kq(1 To UBound(arr), 1 To 1)
For i = 1 To UBound(arr)
If arr(i, 16) = "chi" Then
dk = "PC-"
ElseIf arr(i, 1) = "TDK" Then
dk = "TDK"
ElseIf arr(i, 16) = "thu" Then
dk = "PT-"
ElseIf arr(i, 16) = "baono" Then
dk = "BN-"
ElseIf arr(i, 16) = "baoco" Then
dk = "BC-"
ElseIf arr(i, 16) = "nhapkho" Then
dk = "PN-"
ElseIf arr(i, 16) = "xuatkho" Then
dk = "PX-"
ElseIf arr(i, 16) = " " Then
dk = "PKT-"
ElseIf arr(i, 16) = Empty Then
dk = "PKT-"
Else
dk = Empty
End If
If dk <> Empty Then
dks = dk & "#" & arr(i, 1) & "#" & arr(i, 2)
If Not Dic.Exists(dk) Then
Dic.Add dk, 1
Dic.Item(dks) = 1
kq(i, 1) = dk & Format(1, "000")
Else
so = Dic.Item(dk)
If Not Dic.Exists(dks) Then
so = so + 1
Dic.Add dks, ""
End If
kq(i, 1) = dk & Format(so, "000")
Dic.Item(dk) = so
End If
End If
Next i
.Range("B5:B" & lR).Value = kq
End With
End Sub