Hỏi cách lấy ký tự đầu tiên trong các chuỗi ký tự

Liên hệ QC

khigiahn

Thành viên mới
Tham gia
3/9/09
Bài viết
24
Được thích
0
Mình có một cột họ tên nhân viên giờ mình chỉ muốn lấy ký tự đầu tiên để làm tắt.

Ví Dụ: Nguyễn Văn Hòa chỉ lấy : NVH
Phạm Thị Thu Hương chỉ lấy : PTTH

Các bạn giúp mình với
 
Mình có một cột họ tên nhân viên giờ mình chỉ muốn lấy ký tự đầu tiên để làm tắt.

Ví Dụ: Nguyễn Văn Hòa chỉ lấy : NVH
Phạm Thị Thu Hương chỉ lấy : PTTH

Các bạn giúp mình với
Bạn sử dụng hàm tự tạo sau nhé:
PHP:
Function VT(Ten As String) As String
    Dim i As Long, A
    A = Split(Ten, " ")
    For i = 0 To UBound(A)
        VT = VT & Left(A(i), 1)
    Next i
End Function
 

File đính kèm

  • Viet tat.rar
    5.7 KB · Đọc: 236
Mình có một cột họ tên nhân viên giờ mình chỉ muốn lấy ký tự đầu tiên để làm tắt.

Ví Dụ: Nguyễn Văn Hòa chỉ lấy : NVH
Phạm Thị Thu Hương chỉ lấy : PTTH

Các bạn giúp mình với
Nếu muốn gọn thì vụ này chắc phải dùng VBA rồi. Trong lúc chờ đợi các cao thủ VBA giúp, bạn có thể làm thủ công bằng cách dùng cột phụ:
Giả sử dữ liệu họ tên của bạn ở cột A, kết quả ở cột B. Trước hết bạn copy dữ liệu ở cột A sang cột nào đó, cột G chẳng hạn. Tiếp theo bạn dùng chức năng Text to Columns ở Menu Data để chia cột G thành nhiều cột (Chọn cột G -> Data ->Text to Columns...->Next->Chọn Space->Next->Finish). Giả sử người có họ tên dài nhất trong danh sách của bạn là 5 từ, ở cột B bạn nhập: =LEFT(G1)&LEFT(H1)&LEFT(I1)&LEFT(J1)&LEFT(K1)
Mình nhớ là vấn đề này hình như bạn có hỏi một lần rồi, có lẽ bạn đang cần, tạm dùng cách "hai lúa" trên nhé.
 
Bạn sử dụng hàm tự tạo sau nhé:
PHP:
Function VT(Ten As String) As String
    Dim i As Long, A
    A = Split(Ten, " ")
    For i = 0 To UBound(A)
        VT = VT & Left(A(i), 1)
    Next i
End Function
Code này ngon không
PHP:
Function TenTat(Text As String) As String
  With WorksheetFunction
    Text = "{""" & Replace(.Trim(Text), " ", """;""") & """}"
    TenTat = Join(Evaluate("Transpose(LEFT(" & Text & ",1))"), "")
  End With
End Function
Không vòng lập đâu nhé
 

File đính kèm

  • TenTat_03.xls
    24.5 KB · Đọc: 189
Lần chỉnh sửa cuối:
Em định làm bài này bằng công thức, nhưng chỉ dừng được ở bước tìm ra các vị trí khoảng trắng

PHP:
Tmp=IF(MID('Ban can lam'!$A5;ROW(INDIRECT("1:"&LEN('Ban can lam'!$A5)));1)=" ";ROW(INDIRECT("1:"&LEN('Ban can lam'!$A5)));"")

PHP:
DK=SMALL(Tmp;ROW(INDIRECT("1:"&COUNT(Tmp))))

Kính mong mọi người giải giúp em theo công thức để em có thể học tập
 

File đính kèm

  • Lay ki tu dau tien.xlsx
    10.2 KB · Đọc: 40
Code này ngon không
PHP:
Function TenTat(Text As String) As String
  With WorksheetFunction
    Text = "{""" & Replace(.Trim(Text), " ", """;""") & """}"
    TenTat = Join(Evaluate("Transpose(LEFT(" & Text & ",1))"), "")
  End With
End Function
Không vòng lập đâu nhé

Thưa thầy, code này em có thể mở rộng yêu cầu đánh code học sinh theo quy tắc như:
- Nguyễn Văn A = A.NV
- Trần Trương Thị Hồng Tuyền = Tuyen.TTTH
- Nguyễn Thị Bình =Binh.NT
(p/s: cấu trúc mã học sinh là "tên không dấu"."viết tắt chữ hoa họ, tên lót, tên đệm.."
Cảm ơn thầy.
Trân trọng.
 

File đính kèm

  • Tach ho,ten,viet tat user.xlsx
    17.7 KB · Đọc: 24
Thưa thầy, code này em có thể mở rộng yêu cầu đánh code học sinh theo quy tắc như:
- Nguyễn Văn A = A.NV
- Trần Trương Thị Hồng Tuyền = Tuyen.TTTH
- Nguyễn Thị Bình =Binh.NT
(p/s: cấu trúc mã học sinh là "tên không dấu"."viết tắt chữ hoa họ, tên lót, tên đệm.."
Cảm ơn thầy.
Trân trọng.

Mình thì mình chỉnh sủa những function có sắn để đáp ứng nhu cầu của bạn như sau"
A1 là tên thì B1 = VT(A1)

Mã:
Public Function KhongDau(s As String) As String
Dim i, oldCh$, newCh$
For i = 1 To Len(s)
    oldCh = AscW(Mid(s, i, 1))
    Select Case oldCh
    Case 192, 193, 7840, 7842, 195, 258, 7856, 7854, 7862, 7858, 7860, 194, 7846, 7844, 7852, 7848, 7850: newCh = "A"
    Case 224, 225, 7841, 7843, 227, 259, 7857, 7855, 7863, 7859, 7861, 226, 7847, 7845, 7853, 7849, 7851: newCh = "a"
    Case 272: newCh = "D"
    Case 273: newCh = "d"
    Case 232, 233, 7865, 7867, 7869, 234, 7873, 7871, 7879, 7875, 7877: newCh = "e"
    Case 200, 201, 7864, 7866, 7868, 202, 7872, 7870, 7878, 7874, 7876: newCh = "E"
    Case 236, 237, 7883, 7881, 297: newCh = "i"
    Case 204, 205, 7882, 7880, 296: newCh = "I"
    Case 242, 243, 7885, 7887, 245, 417, 7901, 7899, 7907, 7903, 7905, 244, 7891, 7889, 7897, 7893, 7895: newCh = "o"
    Case 210, 211, 7884, 7886, 213, 416, 7900, 7898, 7906, 7902, 7904, 212, 7890, 7888, 7896, 7892, 7894: newCh = "O"
    Case 249, 250, 7909, 7911, 361, 432, 7915, 7913, 7921, 7917, 7919: newCh = "u"
    Case 217, 218, 7908, 7910, 360, 431, 7914, 7912, 7920, 7916, 7918: newCh = "U"
    Case 7923, 253, 7925, 7927, 7929: newCh = "y"
    Case 7922, 221, 7924, 7926, 7928: newCh = "Y"
    Case Else: newCh = ChrW(oldCh)
    End Select
    KhongDau = KhongDau & newCh
Next
End Function


Function VT(ten As String) As String
    Dim tenkd As String
    Dim i As Long, A
    A = Split(ten, " ")
    For i = 0 To UBound(A) - 1
        VT = VT & UCase(Left(A(i), 1))
    Next
    tenkd = A(UBound(A))
    VT = KhongDau(tenkd) & "." & VT
End Function
 
Mình thử code của anh quanluu1989 thấy chạy đúng mà, cả với trường hợp của Ưng Hoàng Phúc hay Đỗ ĐẠT đều ok.
Code như thế này:
Option Explicit
Public Function KhongDau(s As String) As String
Dim i, oldCh$, newCh$
For i = 1 To Len(s)
oldCh = AscW(Mid(s, i, 1))
Select Case oldCh
Case 192, 193, 7840, 7842, 195, 258, 7856, 7854, 7862, 7858, 7860, 194, 7846, 7844, 7852, 7848, 7850: newCh = "A"
Case 224, 225, 7841, 7843, 227, 259, 7857, 7855, 7863, 7859, 7861, 226, 7847, 7845, 7853, 7849, 7851: newCh = "a"
Case 272: newCh = "D"
Case 273: newCh = "d"
Case 232, 233, 7865, 7867, 7869, 234, 7873, 7871, 7879, 7875, 7877: newCh = "e"
Case 200, 201, 7864, 7866, 7868, 202, 7872, 7870, 7878, 7874, 7876: newCh = "E"
Case 236, 237, 7883, 7881, 297: newCh = "i"
Case 204, 205, 7882, 7880, 296: newCh = "I"
Case 242, 243, 7885, 7887, 245, 417, 7901, 7899, 7907, 7903, 7905, 244, 7891, 7889, 7897, 7893, 7895: newCh = "o"
Case 210, 211, 7884, 7886, 213, 416, 7900, 7898, 7906, 7902, 7904, 212, 7890, 7888, 7896, 7892, 7894: newCh = "O"
Case 249, 250, 7909, 7911, 361, 432, 7915, 7913, 7921, 7917, 7919: newCh = "u"
Case 217, 218, 7908, 7910, 360, 431, 7914, 7912, 7920, 7916, 7918: newCh = "U"
Case 7923, 253, 7925, 7927, 7929: newCh = "y"
Case 7922, 221, 7924, 7926, 7928: newCh = "Y"
Case Else: newCh = ChrW(oldCh)
End Select
KhongDau = KhongDau & newCh
Next
End Function


Function VT(ten As String) As String
Dim tenkd As String
Dim i As Long, A
A = Split(ten, " ")
For i = 0 To UBound(A) - 1
VT = VT & UCase(Left(A(i), 1))
Next
tenkd = A(UBound(A))
VT = KhongDau(tenkd) & "." & VT
End Function

Hàm trong bảng tính là =vt(KhongDau(PROPER(A2))), mình cần in hoa chữ cái đầu nữa, nên mình Proper luôn dòng
Cảm ơn các bạn đã hỗ trợ. Đúng như ý mình muốn.
 

File đính kèm

  • TenTat_03_lay ten viet tat.xls
    46 KB · Đọc: 27
Web KT
Back
Top Bottom