Xin code tạo mã nhân viên.

Liên hệ QC
Nếu dùng mã số, với số lượng dữ liệu lớn thì rất khó khăn trong tìm kiếm.
Nếu bạn "lỡ" xài macro rồi thì tìm kiếm 1 HS hay nhóm HS có cùng fần đặt tính ("ABC") là trở bàn tay mà thôi.
Bạn có cần thao diễn không?
 
Nếu bạn "lỡ" xài macro rồi thì tìm kiếm 1 HS hay nhóm HS có cùng fần đặt tính ("ABC") là trở bàn tay mà thôi.
Bạn có cần thao diễn không?
Mình có áp dụng listbox để tìm dữ liệu.
Vì trình độ có hạn nên chỉ góp nhặt là chủ yếu ( dạng chắp vá). Nếu được bạn có thể giúp dùm để công việc đỡ vất vả hơn.
Cảm ơn bạn đã hỗ trợ rất nhiệt tình.
Chúc bạn vui vẻ trong ngày
 

File đính kèm

  • Mã.rar
    54.8 KB · Đọc: 25
Lần chỉnh sửa cuối:
thầy ơi !
trong code của thầy muốn tách lấy Chữ cái đầu tiên của tên thì sửa sao vậy thầy !!
Ví dụ:
Nguyễn Văn Tú -> NVT001
Nguyễn Văn Tèo -> NVT002
Nguyễn Văn Tý -> NVT003
Em cảm ơn thầy ạ !!!


Trước tiên bạn cần 2 hàm hổ trợ
1> Hàm tách tên:
PHP:
Function NameSplit(ByVal FullName As String, ByVal lType As Long) As String
  Dim tmpArr, Arr()
  Dim Item1 As String, Item2 As String, Item3 As String, tmp As String
  Dim i As Long, n As Long
  ''lType = 1 <==> Lay HO
  ''lType = 2 <==> Lay TÊN LÓT
  ''lType = 3 <==> Lay TÊN
  On Error Resume Next
  FullName = Trim(FullName)
  If Len(FullName) Then
    tmpArr = Split(FullName, " ")
    Item3 = tmpArr(UBound(tmpArr))
    Item1 = tmpArr(0)
    Select Case lType
      Case 1: NameSplit = IIf(UBound(tmpArr) > 0, Item1, "")
      Case 2
        If UBound(tmpArr) > 1 Then
          For i = 1 To UBound(tmpArr) - 1
            tmp = Trim(CStr(tmpArr(i)))
            If Len(tmp) > 0 Then
              n = n + 1
              ReDim Preserve Arr(1 To n)
              Arr(n) = tmp
            End If
          Next
          If n Then NameSplit = Join(Arr, " ")
        End If
      Case 3: NameSplit = Item3
    End Select
  End If
End Function
2> Hàm loại dấu tiếng Việt
PHP:
Function RemoveMarks(ByVal Text As String) As String
  Dim CharCode, i As Long
  Dim ResText As String, sTmp As String
  On Error Resume Next
  sTmp = Text
  CharCode = Array(7855, 7857, 7859, 7861, 7863, 7845, 7847, 7849, 7851, 7853, 225, _
                   224, 7843, 227, 7841, 259, 226, 273, 7871, 7873, 7875, 7877, 7879, _
                   233, 232, 7867, 7869, 7865, 234, 237, 236, 7881, 297, 7883, 7889, _
                   7891, 7893, 7895, 7897, 7899, 7901, 7903, 7905, 7907, 243, 242, _
                   7887, 245, 7885, 244, 417, 7913, 7915, 7917, 7919, 7921, 250, _
                   249, 7911, 361, 7909, 432, 253, 7923, 7927, 7929, 7925)
  ResText = "aaaaaaaaaaaaaaaaadeeeeeeeeeeeiiiiiooooooooooooooooouuuuuuuuuuuyyyyy"
  For i = 0 To UBound(CharCode)
    sTmp = Replace(sTmp, ChrW(CharCode(i)), Mid(ResText, i + 1, 1))
    sTmp = Replace(sTmp, UCase(ChrW(CharCode(i))), UCase(Mid(ResText, i + 1, 1)))
  Next
  RemoveMarks = sTmp
End Function
3> Tiếp theo là code chính:
PHP:
Sub Main()
  Dim sArray, Arr()
  Dim i As Long, n As Long
  Dim lastName As String, tmp As String
  On Error Resume Next
  With Sheets("Sheet1").Range("A3:A1000")
    sArray = .Value
    ReDim Arr(1 To UBound(sArray), 1 To 1)
    With CreateObject("Scripting.Dictionary")
      For i = 1 To UBound(sArray)
        tmp = Trim(CStr(sArray(i, 1)))
        If Len(tmp) Then
          lastName = UCase(NameSplit(tmp, 3))
          lastName = Trim(RemoveMarks(lastName))
          If Not .Exists(lastName) Then
            .Add lastName, 1
            Arr(i, 1) = lastName & 1
          Else
            .Item(lastName) = .Item(lastName) + 1
            Arr(i, 1) = lastName & .Item(lastName)
          End If
        End If
      Next
    End With
    .Offset(, 1).Value = Arr
  End With
End Sub
 
Xin các cao thủ viết dùm e đoạn code tạo mã nhân viên với điều kiện e đã ghi trong file đính kèm! Thanks.
Và:
Mình có danh sách học sinh, nhiều khi học sinh chuyển đi rồi lại về sau một thời gian. Do đó có thể sẽ nhập trùng dữ liệu vì đã có dữ liệu trước đó. Mong các anh chị trong diễn đàn viết giúp đoạn code tạo mã cho học sinh ( tự động) để tránh nhập trùng dữ liệu.
Nội dung yêu cầu được ghi trong file.
Xin cảm ơn.
Mình có làm cái giống các bạn cần ở thread này:
Code Tạo Mã Nhân VIên
Các bạn có thể tham khảo nha...
 
Nếu bạn lập CSDL bên MS ACCESS thì không nói làm gì, còn bên Excel thì nên vầy:

Mã nên có độ dài như nhau;
Mã của nhân vậy này bao gồm mã của nhân vật khác;

Ví dụ Cô Ng. Việt Hồng có mã HNV; Thì cô Ng.Việt Hoa không thể mã là HNV1 được;
Mà cô đầu nên có mã là HNV0

Bạn xem file của mình sẵn có

/(/hững mong giúp bạn ít nhiều!
Đúng rồi. Mã NV có thể dựa vào nhiều tiêu chí (nam, nữ, phòng ban, họ, tên....vv) nhưng phải có đỉ tài nguyên sô khi nv tăng lên đến hàng nghìn, triệu.. và số ký tự bằng nhau và thống nhất. Ví dụ: NLCVI001=Nam, Lê Công Vinh 001 (8 ký tự)
 
Web KT
Back
Top Bottom