Xin được sự giúp đỡ: đánh số thứ tự hợp đồng

Liên hệ QC

Bùi Thúy Thúy

Thành viên thường trực
Tham gia
2/7/18
Bài viết
289
Được thích
38
Nhờ các thầy, anh/chị giúp em code đánh số thứ tự hợp đồng: từ ô B15 trở đi theo nguyên tắc:
Số thứ tự được điền vào các cột ở ô B khi các cột Q tương ứng có dữ liệu ngày ký hợp đồng
A/Ngày ký hợp đồng tháng ký hợp đồng/năm ký hợp đồng/HĐLĐ-VN

Với A có ý nghĩa như sau:

A là: số thứ tự hợp đồng :

+) Giả sử ban đầu số thứ tự hợp đồng bắt đầu là số nào đó “B” (trong hình ví dụ là số 21)

+) Số “thứ tự hợp đồng” tiếp theo sẽ điền sẽ là “B+1” được điền theo thời gian tăng dần của ngày ngày ký hợp đồng.

+ )Nếu trong cùng 1 ngày ký nhiều hợp đồng thì hợp đồng nào được điền vào hàng trong file excel trước thì sẽ mang số thứ tự nhỏ hơn.
Ghi chú: thời gian làm hợp đồng sắp xếp lẫn lộn có thể không theo trình tự thời gian.
Cụ thể như hình dưới:
1.png
 

File đính kèm

  • 567.xlsm
    154.5 KB · Đọc: 7
Lần chỉnh sửa cuối:
Thử công thức này:
Mã:
="B"&IF(COUNTIF($Q$15:Q15,Q15)>1,"+"&COUNTIF($Q$15:Q15,Q15)-1,"")&"/"&TEXT(MONTH(Q15),"00")&TEXT(DAY(Q15),"00")&"/"&YEAR(Q15)&"/HĐLĐ"
Và tham khảo:
Mã:
="B"&TEXT(COUNTIF($Q$15:Q15,Q15),"00")&"/"&TEXT(Q15,"mmdd/yyyy")&"/HĐLĐ"
 
Upvote 0
Thử công thức này:
Mã:
="B"&IF(COUNTIF($Q$15:Q15,Q15)>1,"+"&COUNTIF($Q$15:Q15,Q15)-1,"")&"/"&TEXT(MONTH(Q15),"00")&TEXT(DAY(Q15),"00")&"/"&YEAR(Q15)&"/HĐLĐ"
Và tham khảo:
Mã:
="B"&TEXT(COUNTIF($Q$15:Q15,Q15),"00")&"/"&TEXT(Q15,"mmdd/yyyy")&"/HĐLĐ"
Em vừa thử không được như ý muốn ạ!
Thời gian theo ngày tháng năm có thể không sắp xếp theo thứ tự tăng dần mà sắp xếp lẫn lộn, khi đó dùng công thức liệu có được không ạ?
23.png
 
Upvote 0
Khi nào thì bắt đầu là 21? Khi nào bắt đầu là 10? Có thêm chữ "Số: " hay không?
 
Lần chỉnh sửa cuối:
Upvote 0
Khi nào thì bắt đầu là 21? Khi nào bắt đầu là 10? Có thêm chữ "Số: " hay không?
Vâng đó là tùy theo ạ! có thể bắt đầu bằng số con nào đó chứ không phải bắt đầu bằng chữ, và thời gian không theo thứ tự (có thể thời gian sắp xếp lẫn lộn không theo thứ tự thời gian tăng dần hay giảm dần), quy luật cụ thể em có để như hình đính kèm bài #1 ạ!
Em cám ơn anh!
 
Upvote 0
Công thức:
Mã:
=(20+COUNTIF($Q$15:$Q15,$Q15))&"/"&TEXT(Q15,"mmdd/yyyy")&"/HĐLĐ"
 
Upvote 0
Công thức:
Mã:
=(20+COUNTIF($Q$15:$Q15,$Q15))&"/"&TEXT(Q15,"mmdd/yyyy")&"/HĐLĐ"
Vẫn có sự khác biệt anh ạ!
số thứ tự dòng 16 dòng 17, dòng 18 chưa được ạ!
ac.png
Bài đã được tự động gộp:

Phải Sort cột Q theo thứ tự thời gian từ nhỏ đến lớn mới dễ viết code.
Loạn xà ngầu thì oải lắm.
Vâng, em sẽ sắp xếp lại thời gian theo thứ tự tăng dần theo ngày tháng năm!
Thầy viết giúp em code ạ! Em cám ơn thầy!
 
Upvote 0
File nay không cần xếp STT HĐ (hợp đồng) nè; Nhưng mã số HĐ chỉ là 6 kí tự, gồm 3 ký số tăng dần trong ngày HĐ
Kí từ thứ 4 chì năm: H là năm 2018, I sẽ là năm kế tiếp
Kí tự thứ 5 chỉ tháng; A chỉ tháng 10, B là tháng 11
Kí tự cuối chỉ ngày: C là ngày 12; D là ngày 13, . . .
. . . .
& xin mời thử file
Hàm để mã hóa 1 ngày cụ thể thành chuỗi 3 ký tự:
PHP:
Const Alf As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Function DatToTxt(Optional Dat As Date) As String
If Dat < 9 Then Dat = Date
DatToTxt = Mid(Alf, Year(Dat) - 2000, 1) & Mid(Alf, Month(Dat) + 1, 1)
DatToTxt = DatToTxt & Mid(Alf, Day(Dat) + 1, 1)
End Function
& Macro sự kiện để mã hóa số TT của HĐ:
Mã:
Const Dong As Integer = 999
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range, sRng As Range
Dim MyAdd As String, DtS As String, Tmp As String, SoTT As Integer
Dim Num As Integer

If Not Intersect(Target, [Q15].Resize(Dong)) Is Nothing Then
    Set Rng = [B14].Resize(Dong + 1):               DtS = DatToTxt(Target.Value)
    Cells(Target.Row, "B").Value = ""                   'Xóa Du Liêu Da Có     '
    Set sRng = Rng.Find(DtS, , xlFormulas, xlPart)
    If sRng Is Nothing Then
        Cells(Target.Row, "B").Value = "001" & DtS
    Else
        MyAdd = sRng.Address
        Do
            Num = CInt(Left(Cells(sRng.Row, "B").Value, 3))
            If SoTT < Num Then SoTT = Num
            Set sRng = Rng.FindNext(sRng)
        Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
        Cells(Target.Row, "B").Value = Right("00" & CStr(SoTT + 1), 3) & DtS
    End If
End If
End Sub
 

File đính kèm

  • Date.rar
    98 KB · Đọc: 17
Lần chỉnh sửa cuối:
Upvote 0
File nay không cần xếp STT HĐ (hợp đồng) nè; Nhưng mã số HĐ chỉ là 6 kí tự, gồm 3 ký số tăng dần trong ngày HĐ
Kí từ thứ 4 chì năm: H là năm 2018, I sẽ là năm kế tiếp
Kí tự thứ 5 chỉ tháng; A chỉ tháng 10, B là tháng 11
Kí tự cuối chỉ ngày: C là ngày 12; D là ngày 13, . . .
. . . .
& xin mời thử file
Hàm để mã hóa 1 ngày cụ thể thành chuỗi 3 ký tự:
PHP:
Const Alf As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Function DatToTxt(Optional Dat As Date) As String
If Dat < 9 Then Dat = Date
DatToTxt = Mid(Alf, Year(Dat) - 2000, 1) & Mid(Alf, Month(Dat) + 1, 1)
DatToTxt = DatToTxt & Mid(Alf, Day(Dat) + 1, 1)
End Function
& Macro sự kiện để mã hóa số TT của HĐ:
Mã:
Const Dong As Integer = 999
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range, sRng As Range
Dim MyAdd As String, DtS As String, Tmp As String, SoTT As Integer
Dim Num As Integer

If Not Intersect(Target, [Q15].Resize(Dong)) Is Nothing Then
    Set Rng = [B14].Resize(Dong + 1):               DtS = DatToTxt(Target.Value)
    Cells(Target.Row, "B").Value = ""                   'Xóa Du Liêu Da Có     '
    Set sRng = Rng.Find(DtS, , xlFormulas, xlPart)
    If sRng Is Nothing Then
        Cells(Target.Row, "B").Value = "001" & DtS
    Else
        MyAdd = sRng.Address
        Do
            Num = CInt(Left(Cells(sRng.Row, "B").Value, 3))
            If SoTT < Num Then SoTT = Num
            Set sRng = Rng.FindNext(sRng)
        Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
        Cells(Target.Row, "B").Value = Right("00" & CStr(SoTT + 1), 3) & DtS
    End If
End If
End Sub
Rất hay ạ! em cám ơn thầy!
 
Upvote 0
Web KT
Back
Top Bottom