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

Bùi Thúy Thúy

Thành viên thường trực
Tham gia ngày
2 Tháng bảy 2018
Bài viết
217
Được thích
27
Điểm
185
Tuổi
32
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

Lần chỉnh sửa cuối:

leonguyenz

Thành viên mới
Tham gia ngày
2 Tháng tám 2010
Bài viết
4,185
Được thích
7,394
Điểm
560
Nơi ở
#REF
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Đ"
 

Bùi Thúy Thúy

Thành viên thường trực
Tham gia ngày
2 Tháng bảy 2018
Bài viết
217
Được thích
27
Điểm
185
Tuổi
32
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
 

leonguyenz

Thành viên mới
Tham gia ngày
2 Tháng tám 2010
Bài viết
4,185
Được thích
7,394
Điểm
560
Nơi ở
#REF
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:

Bùi Thúy Thúy

Thành viên thường trực
Tham gia ngày
2 Tháng bảy 2018
Bài viết
217
Được thích
27
Điểm
185
Tuổi
32
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!
 

leonguyenz

Thành viên mới
Tham gia ngày
2 Tháng tám 2010
Bài viết
4,185
Được thích
7,394
Điểm
560
Nơi ở
#REF
Công thức:
Mã:
=(20+COUNTIF($Q$15:$Q15,$Q15))&"/"&TEXT(Q15,"mmdd/yyyy")&"/HĐLĐ"
 

Ba Tê

Cạo Rồi Khỏi Gội
Tham gia ngày
5 Tháng năm 2009
Bài viết
11,060
Được thích
15,628
Điểm
1,860
Tuổi
60
Nơi ở
An Giang

Bùi Thúy Thúy

Thành viên thường trực
Tham gia ngày
2 Tháng bảy 2018
Bài viết
217
Được thích
27
Điểm
185
Tuổi
32
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!
 

Ba Tê

Cạo Rồi Khỏi Gội
Tham gia ngày
5 Tháng năm 2009
Bài viết
11,060
Được thích
15,628
Điểm
1,860
Tuổi
60
Nơi ở
An Giang

File đính kèm

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia ngày
8 Tháng sáu 2006
Bài viết
5,860
Được thích
9,785
Điểm
860
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

Lần chỉnh sửa cuối:

Bùi Thúy Thúy

Thành viên thường trực
Tham gia ngày
2 Tháng bảy 2018
Bài viết
217
Được thích
27
Điểm
185
Tuổi
32
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!
 
Top Bottom