- Tham gia
- 17/8/08
- Bài viết
- 8,610
- Được thích
- 16,671
- Giới tính
- Nam
Thông thường các công ty luôn lấy số thứ tự định dạng kiểu "00000" làm mã số, cũng có một số nơi lấy tên tắt đầu của công ty rồi gán số thứ tự làm mã, ví dụ Cảng Sài Gòn ==> Mã NV: CSG000001, cũng vậy, có một số công ty lấy họ tên (viết tắt) hoặc lấy theo khối phòng ban (viết tắt) thêm 1 loạt dãy số nữa làm mã nhân viên, ví dụ Hoàng Trọng Nghĩa, MS: HTN000001 hoặc Đội Kho Hàng: DKH000001.
Nếu như chỉ lấy số thứ tự thôi thì có gì phải bàn, riêng các trường hợp sau, rất khó cho chúng ta đặt mã, vì làm sao nhận biết được có trùng tên không, trùng tên thì có trùng số hay không, làm sao thêm 1 vào dãy số phía sau nếu bị trùng?
Trước đây có bài tại đường link dưới rất hay, nhưng tôi vẫn chưa cảm thấy ổn vì còn hạn chế nhiều thứ.
Xem tại đây: http://www.giaiphapexcel.com/forum/...i-họ-tên-tiếng-Việt-để-làm-mã-nhân-viên/page5
Nay tôi viết ra hàm này để mọi người cùng tham khảo, ứng dụng hoặc cải tiến nếu có thể.
Như bài này, tôi cần có 2 hàm hỗ trợ, đó là hàm loại dấu tiếng việt FontConverter (UNI / VNI), và hàm hỗ trợ còn lại là hàm họ tên viết tắt InitialName:
Khi đã có 2 hàm trên, việc viết hàm chính đã là chuyện dễ dàng!
Hàm đặt mã theo họ tên hoặc đơn vị: IDMaxPlus
Cách sử dụng hàm IDMaxPlus:
=IDMaxPlus(VungSoSanh,HoTen,MaNguon)
Với MaNguon (mã nguồn):
1 là mã Unicode; 2 là mà VNI Windows
Các bạn xem file nhé!
==============================================
Vì lý do chỉnh sửa, xin các bạn xem file tại bài 2 của topic này:
http://www.giaiphapexcel.com/forum/...n-(tên-viết-tắt-1-dãy-số)&p=393458#post393458
Nếu như chỉ lấy số thứ tự thôi thì có gì phải bàn, riêng các trường hợp sau, rất khó cho chúng ta đặt mã, vì làm sao nhận biết được có trùng tên không, trùng tên thì có trùng số hay không, làm sao thêm 1 vào dãy số phía sau nếu bị trùng?
Trước đây có bài tại đường link dưới rất hay, nhưng tôi vẫn chưa cảm thấy ổn vì còn hạn chế nhiều thứ.
Xem tại đây: http://www.giaiphapexcel.com/forum/...i-họ-tên-tiếng-Việt-để-làm-mã-nhân-viên/page5
Nay tôi viết ra hàm này để mọi người cùng tham khảo, ứng dụng hoặc cải tiến nếu có thể.
Như bài này, tôi cần có 2 hàm hỗ trợ, đó là hàm loại dấu tiếng việt FontConverter (UNI / VNI), và hàm hỗ trợ còn lại là hàm họ tên viết tắt InitialName:
Mã:
Function InitialName(UniOrVniText As String, ByVal SourceCode As Byte) As String[COLOR=#006400] 'SourceCode: 1 is Unicode; 2 is VNI Windows[/COLOR]
UniOrVniText = Replace(Trim(UniOrVniText), "0", "")
If Len(UniOrVniText) = 0 Then InitialName = "": Exit Function
If InStr(UniOrVniText, " ") = 0 Then
If Len(UniOrVniText) < 4 Then InitialName = UniOrVniText Else InitialName = Left(UniOrVniText, 3)
Else
UniOrVniText = " " & UniOrVniText
Do Until InStr(UniOrVniText, " ") = 0
UniOrVniText = Mid(UniOrVniText, InStr(UniOrVniText, " ") + 1, Len(UniOrVniText))
InitialName = InitialName & Left(UniOrVniText, 1)
Loop
InitialName = UCase(FontConverter(InitialName, SourceCode, 3))
End If
End Function
Khi đã có 2 hàm trên, việc viết hàm chính đã là chuyện dễ dàng!
Hàm đặt mã theo họ tên hoặc đơn vị: IDMaxPlus
Mã:
Function IDMaxPlus(ByVal SrcRng, ByVal UniOrVniText, ByVal SourceCode As Byte) As String
Dim i As Long, j As Long, Tmp As Long, TmpMax As Long
Dim LenKeyText As Long, KeyText As String, Arr
On Error Resume Next
KeyText = UniOrVniText
KeyText = InitialName(KeyText, SourceCode)
LenKeyText = Len(KeyText): TmpMax = 0
Arr = SrcRng.Value
If Not IsArray(Arr) Then
If Left(SrcRng.Value, LenKeyText) = KeyText Then
TmpMax = CLng(Right(SrcRng.Value, Len(SrcRng.Value) - LenKeyText))
End If
Else
For i = 1 To UBound(Arr, 1)
For j = 1 To UBound(Arr, 2)
If Left(Arr(i, j), LenKeyText) = KeyText Then
Tmp = CLng(Right(Arr(i, j), Len(Arr(i, j)) - LenKeyText))
If TmpMax < Tmp Then TmpMax = Tmp
End If
Next
Next
End If
IDMaxPlus = KeyText & Format(TmpMax + 1, "00000")
End Function
Cách sử dụng hàm IDMaxPlus:
=IDMaxPlus(VungSoSanh,HoTen,MaNguon)
Với MaNguon (mã nguồn):
1 là mã Unicode; 2 là mà VNI Windows
Các bạn xem file nhé!
==============================================
Vì lý do chỉnh sửa, xin các bạn xem file tại bài 2 của topic này:
http://www.giaiphapexcel.com/forum/...n-(tên-viết-tắt-1-dãy-số)&p=393458#post393458
Lần chỉnh sửa cuối: