manhcuong91
Thành viên mới
- Tham gia
- 27/12/14
- Bài viết
- 18
- Được thích
- 1
Chủ đề này vui nè, ví dụ tên như sau:Các cao nhân giúp em với ạ. Em muốn lấy các ký tự đầu của họ và tên để tạo thành mã nhân viên thì nên dùng hàm nào được ạ.
Em có gửi file đính kèm bên dưới ạ. Mong được mọi người chỉ giúp. em cám ơn!
Đặng Uông |
Lê Ông Nhân |
Bộ mã của bạn chưa thật hoàn chỉnh; Thể hiện ở những chổ sau, từ bé đến lớn:(2) Anh/ Chị có cách sử dụng hàm nào giúp em tạo mã nhân viên mà không phải đánh tay không ạ. Đây có 6 nhân viên còn điền tay được, chứ thêm 1000 nhân viên nữa mà điền tay thì tốn thời gian quá ạ.
(1) Mã nhân viên trên là lấy các ký tự đầu của Họ và tên và kèm theo số thứ tự tương ứng
Mã NV Họ & Tên
FFF00 Đỗ Đình Đức
DJF00 Dương Đông
DFF00 Dương Đăng Đại
LAN00 Lê Thị Ân Nhân
Dùng hàm tự tạo nhéCác cao nhân giúp em với ạ. Em muốn lấy các ký tự đầu của họ và tên để tạo thành mã nhân viên thì nên dùng hàm nào được ạ.
Em có gửi file đính kèm bên dưới ạ. Mong được mọi người chỉ giúp. em cám ơn!
Muốn loại dấu tìm hàm tự tạo chịu khó tìm sẽ có nhiềuSao hàm của bạn @LamNA mình thử gõ tên"Nguyễn Ái Loan" thì nó ra"NÁL"
Function BoDau(Text As String) As String
Dim AsciiDict As Object
Set AsciiDict = CreateObject("scripting.dictionary")
AsciiDict(192) = "A"
AsciiDict(193) = "A"
AsciiDict(194) = "A"
AsciiDict(195) = "A"
AsciiDict(196) = "A"
AsciiDict(197) = "A"
AsciiDict(199) = "C"
AsciiDict(200) = "E"
AsciiDict(201) = "E"
AsciiDict(202) = "E"
AsciiDict(203) = "E"
AsciiDict(204) = "I"
AsciiDict(205) = "I"
AsciiDict(206) = "I"
AsciiDict(207) = "I"
AsciiDict(208) = "D"
AsciiDict(209) = "N"
AsciiDict(210) = "O"
AsciiDict(211) = "O"
AsciiDict(212) = "O"
AsciiDict(213) = "O"
AsciiDict(214) = "O"
AsciiDict(217) = "U"
AsciiDict(218) = "U"
AsciiDict(219) = "U"
AsciiDict(220) = "U"
AsciiDict(221) = "Y"
AsciiDict(224) = "a"
AsciiDict(225) = "a"
AsciiDict(226) = "a"
AsciiDict(227) = "a"
AsciiDict(228) = "a"
AsciiDict(229) = "a"
AsciiDict(231) = "c"
AsciiDict(232) = "e"
AsciiDict(233) = "e"
AsciiDict(234) = "e"
AsciiDict(235) = "e"
AsciiDict(236) = "i"
AsciiDict(237) = "i"
AsciiDict(238) = "i"
AsciiDict(239) = "i"
AsciiDict(240) = "d"
AsciiDict(241) = "n"
AsciiDict(242) = "o"
AsciiDict(243) = "o"
AsciiDict(244) = "o"
AsciiDict(245) = "o"
AsciiDict(246) = "o"
AsciiDict(249) = "u"
AsciiDict(250) = "u"
AsciiDict(251) = "u"
AsciiDict(252) = "u"
AsciiDict(253) = "y"
AsciiDict(255) = "y"
AsciiDict(352) = "S"
AsciiDict(353) = "s"
AsciiDict(376) = "Y"
AsciiDict(381) = "Z"
AsciiDict(382) = "z"
AsciiDict(258) = "A"
AsciiDict(259) = "a"
AsciiDict(272) = "D"
AsciiDict(273) = "d"
AsciiDict(296) = "I"
AsciiDict(297) = "i"
AsciiDict(360) = "U"
AsciiDict(361) = "u"
AsciiDict(416) = "O"
AsciiDict(417) = "o"
AsciiDict(431) = "U"
AsciiDict(432) = "u"
AsciiDict(7840) = "A"
AsciiDict(7841) = "a"
AsciiDict(7842) = "A"
AsciiDict(7843) = "a"
AsciiDict(7844) = "A"
AsciiDict(7845) = "a"
AsciiDict(7846) = "A"
AsciiDict(7847) = "a"
AsciiDict(7848) = "A"
AsciiDict(7849) = "a"
AsciiDict(7850) = "A"
AsciiDict(7851) = "a"
AsciiDict(7852) = "A"
AsciiDict(7853) = "a"
AsciiDict(7854) = "A"
AsciiDict(7855) = "a"
AsciiDict(7856) = "A"
AsciiDict(7857) = "a"
AsciiDict(7858) = "A"
AsciiDict(7859) = "a"
AsciiDict(7860) = "A"
AsciiDict(7861) = "a"
AsciiDict(7862) = "A"
AsciiDict(7863) = "a"
AsciiDict(7864) = "E"
AsciiDict(7865) = "e"
AsciiDict(7866) = "E"
AsciiDict(7867) = "e"
AsciiDict(7868) = "E"
AsciiDict(7869) = "e"
AsciiDict(7870) = "E"
AsciiDict(7871) = "e"
AsciiDict(7872) = "E"
AsciiDict(7873) = "e"
AsciiDict(7874) = "E"
AsciiDict(7875) = "e"
AsciiDict(7876) = "E"
AsciiDict(7877) = "e"
AsciiDict(7878) = "E"
AsciiDict(7879) = "e"
AsciiDict(7880) = "I"
AsciiDict(7881) = "i"
AsciiDict(7882) = "I"
AsciiDict(7883) = "i"
AsciiDict(7884) = "O"
AsciiDict(7885) = "o"
AsciiDict(7886) = "O"
AsciiDict(7887) = "o"
AsciiDict(7888) = "O"
AsciiDict(7889) = "o"
AsciiDict(7890) = "O"
AsciiDict(7891) = "o"
AsciiDict(7892) = "O"
AsciiDict(7893) = "o"
AsciiDict(7894) = "O"
AsciiDict(7895) = "o"
AsciiDict(7896) = "O"
AsciiDict(7897) = "o"
AsciiDict(7898) = "O"
AsciiDict(7899) = "o"
AsciiDict(7900) = "O"
AsciiDict(7901) = "o"
AsciiDict(7902) = "O"
AsciiDict(7903) = "o"
AsciiDict(7904) = "O"
AsciiDict(7905) = "o"
AsciiDict(7906) = "O"
AsciiDict(7907) = "o"
AsciiDict(7908) = "U"
AsciiDict(7909) = "u"
AsciiDict(7910) = "U"
AsciiDict(7911) = "u"
AsciiDict(7912) = "U"
AsciiDict(7913) = "u"
AsciiDict(7914) = "U"
AsciiDict(7915) = "u"
AsciiDict(7916) = "U"
AsciiDict(7917) = "u"
AsciiDict(7918) = "U"
AsciiDict(7919) = "u"
AsciiDict(7920) = "U"
AsciiDict(7921) = "u"
AsciiDict(7922) = "Y"
AsciiDict(7923) = "y"
AsciiDict(7924) = "Y"
AsciiDict(7925) = "y"
AsciiDict(7926) = "Y"
AsciiDict(7927) = "y"
AsciiDict(7928) = "Y"
AsciiDict(7929) = "y"
AsciiDict(8363) = "d"
Text = Trim(Text)
If Text = "" Then Exit Function
Dim Char As String, _
NormalizedText As String, _
UnicodeCharCode As Long, _
i As Long
For i = 1 To Len(Text)
Char = Mid(Text, i, 1)
UnicodeCharCode = AscW(Char)
If (UnicodeCharCode < 0) Then
UnicodeCharCode = 65536 + UnicodeCharCode
End If
If AsciiDict.Exists(UnicodeCharCode) Then
NormalizedText = NormalizedText & AsciiDict.Item(UnicodeCharCode)
Else
NormalizedText = NormalizedText & Char
End If
Next
BoDau = NormalizedText
End Function
Dùng hàm tự tạo nhé
Trong bộ mã của bạn có con số 2019 chắc là để biểu thị số năm mà người NV (nhân viên) đó vô CQ làm việc; Đồng ý thôi, nhưng không nên xài thừa thải chuyện trùng lắp như vậy trong bộ mã(2) Code của bác SA_DQ thì nhất quán về số lượng ký tự nhưng trong một số trường hợp như hình ví dụ của bác lại không còn đúng ý nghĩa lấy ký tự đầu của họ tên đưa vô mã.
(1) Theo quan điểm cá nhân tôi thì các mã liên quan đến họ tên tôi không dùng ký tự đầu của Họ Tên mà chỉ dùng cách đơn giản nhất là:
- "NV" + Stt (Vd: NV0001). - Hoặc thêm số năm gia nhập Cty + Stt: NV20190001
Thêm "NV" chi vậy? Nó chả giúp thêm được cái gì, ngoài việc ép Excel không dùng số....
Theo quan điểm cá nhân tôi thì các mã liên quan đến họ tên tôi không dùng ký tự đầu của Họ Tên mà chỉ dùng cách đơn giản nhất là:
- "NV" + Stt (Vd: NV0001).
- Hoặc thêm số năm gia nhập Cty + Stt: NV20190001
...
Thường thì CQ ngành may thì số LĐ có biến động lớn khi có hay thiếu đơn hàngNếu là tôi thì dùng 20190101A (ngày tháng năm và A là người đầu tiên trong ngày, người kế tiếp là B)
Chú: nếu ngày ấy có hơn 26 người (trường hợp rất có thể xảy ra nếu lần đầu tiên nhập mã cho tất cả nhân viên) thì hoặc cho mã chạy luôn sang AA, hay cho "ăn gian" sang ngày 20190102,...
Mình xin được phép khoe thêm với 1 số bạn:Em thấy cách dùng mã của Bác SA_DQ cũng hay vì nhìn vào mã cũng phần nào hình dung ra người đó tên gì.
Thêm "NV" chi vậy? Nó chả giúp thêm được cái gì, ngoài việc ép Excel không dùng số.
Nếu là tôi thì dùng 20190101A (ngày tháng năm và A là người đầu tiên trong ngày, người kế tiếp là B)
Chú: nếu ngày ấy có hơn 26 người (trường hợp rất có thể xảy ra nếu lần đầu tiên nhập mã cho tất cả nhân viên) thì hoặc cho mã chạy luôn sang AA, hay cho "ăn gian" sang ngày 20190102,...
Đối với khoá chính (mã) thì vẫn có thể chứa các thông tin trùng nhau nhưng toàn bộ mã thì bắt buộc không trùng. Cái này cũng tuỳ quan điểm thiết kế như cái ý của bác SA_DQ là dùng J, K thay cho năm cũng được nhưng khó hiểu, nó giống magic number vậyTrong bộ mã của bạn có con số 2019 chắc là để biểu thị số năm mà người NV (nhân viên) đó vô CQ làm việc; Đồng ý thôi, nhưng không nên xài thừa thải chuyện trùng lắp như vậy trong bộ mã
(2) . Cái này cũng tuỳ quan điểm thiết kế như cái ý của bác SA_DQ là dùng J, K thay cho năm cũng được nhưng khó hiểu, nó giống magic number vậy
Vd:
(1) KHDL010001 --> Khách hàng + Đại lý + Quận 1 + Số thứ tự
KHBSBT0011 --> Khách hàng + Bán Sỉ + Quận Bình thạnh + Số thứ tự
Nếu phát sinh ít (như HS mới chuyển trường) thì lọc theo phần đặc tính & thêm đơn vị cho phần định trị thôiBác SA_DQ ơi, nếu có phát sinh thêm học sinh thì tự gõ tay vào hả Bác? Bác cho luôn code đi.
Em thấy cách dùng mã của Bác SA_DQ cũng hay vì nhìn vào mã cũng phần nào hình dung ra người đó tên gì.
A, B,... là tiểu xảo để ép Excel phải nhận chuỗi không phải là số....
Dùng ký tự A, B... cuối chuỗi như anh nói thì gặp vụ 26 người trong ngày do đó em dùng là số thứ tự (có thể 2, 3 ký tự: 001, 002) để tránh trường hơp đặc biệt này.
...
Dùng cột phụCác cao nhân giúp em với ạ. Em muốn lấy các ký tự đầu của họ và tên để tạo thành mã nhân viên thì nên dùng hàm nào được ạ.
Em có gửi file đính kèm bên dưới ạ. Mong được mọi người chỉ giúp. em cám ơn!
STT | Họ | Tên | Mã NV | Chức vụ | Ngày sinh | ||||||
1 | Bùi Đức | Cường | BJC4561 | Kế toán | 2/6/1991 | ||||||
2 | Bùi Đức | Cương | BJC4562 | Giám đốc | 11/20/1974 | ||||||
3 | Bùi Thị Tú | Ân | BTTA453 | Phó giám đốc | 2/19/2000 | ||||||
4 | Công Tằng Tôn Nữ Minh | Nguyệt | CTTNMN4 | Kế toán | 2/10/1996 | ||||||
5 | Công Tằng Tôn Nữ Nguyệt | Minh | CTTNNM5 | Thủ quỹ | 7/15/1977 | ||||||
6 | Hà Mạnh | Cường | HMC4566 | Phó giám đốc | 7/26/1995 | ||||||
7 | Nguyễn Kim | Yến | NKY4567 | 8/5/2003 | |||||||
8 | Phan Trung | Kiên | PTK4568 | 8/16/2001 | |||||||
9 | Hoài | Cương | HC_4569 | 8/26/2002 | |||||||
Sub TaoMa7()
Dim Rws As Long, J As Long, VTr As Byte
Dim HoDem As String, MaNV As String
Const KT As String = " "
With Sheet1
Rws = .[B2].CurrentRegion.Rows.Count
End With
For J = 2 To Rws
HoDem = Trim$(Cells(J, "B").Value) & KT 'Giai Quyêt Ho & Dem '
Do
MaNV = MaNV & LoaiDauTV(Left(HoDem, 1))
VTr = InStr(HoDem, KT)
If VTr < 2 Then Exit Do Else HoDem = Mid(HoDem, VTr + 1, Len(HoDem))
Loop
MaNV = MaNV & LoaiDauTV(Left(Cells(J, "C").Value, 1))
If Len(MaNV) = 2 Then MaNV = MaNV & "_"
Cells(J, "D").Value = Left(MaNV & "4567", 6) & CStr(Cells(J, "A").Value Mod 10)
MaNV = ""
Next J
End Sub
Function LoaiDauTV(ByVal Text As String) As String
Dim Charcode(), ResTxt(), I As Long, Tmp As String
Tmp = Text
Charcode = Array(224, 225, 226, 227, 259, 7841, 7843, 7845, 7847, 7849, 7851, 7853, 7855, 7857, 7859, 7861, _
7863, 273, 232, 233, 234, 7865, 7867, 7869, 7871, 7873, 7875, 7877, 7879, 236, 237, 297, 7881, 7883, 242, _
243, 244, 245, 417, 7885, 7887, 7889, 7891, 7893, 7895, 7897, 7899, 7901, 7903, 7905, 7907, 249, 250, _
361, 432, 7909, 7911, 7913, 7915, 7917, 7919, 7921, 253, 7923, 7925, 7927, 7929)
ResTxt = Array("a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", _
"J", "e", "e", "e", "e", "e", "e", "e", "e", "e", "e", "e", "i", "i", "i", "i", "i", "o", "o", _
"o", "o", "o", "o", "o", "o", "o", "o", "o", "o", "o", "o", "o", "o", "o", "u", "u", "u", "u", "u", _
"u", "u", "u", "u", "u", "u", "y", "y", "y", "y", "y") 'd'
For I = 0 To UBound(Charcode)
Tmp = Replace(Tmp, ChrW(Charcode(I)), ResTxt(I))
Tmp = Replace(Tmp, UCase(ChrW(Charcode(I))), UCase(ResTxt(I)))
Next
LoaiDauTV = Tmp
End Function