Tách Tên_Họ_Tên đệm

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

Strawberry1312

Thành viên mới
Tham gia
14/2/19
Bài viết
38
Được thích
12
Em chào Anh chị GPE,
Em có 1 vấn đề cần giúp đỡ, mong anh chị hướng dẫn ạ. Em có 1 danh sách họ tên, sau khi bỏ dấu em cần lọc ra Tên (đầy đủ), Họ (chữ cái đầu), Tên đệm (chữ cái đầu) theo file có sẵn kết quả
Em xin cảm ơn Anh/Chị nhiều!
 

File đính kèm

Em chào Anh chị GPE,
Em có 1 vấn đề cần giúp đỡ, mong anh chị hướng dẫn ạ. Em có 1 danh sách họ tên, sau khi bỏ dấu em cần lọc ra Tên (đầy đủ), Họ (chữ cái đầu), Tên đệm (chữ cái đầu) theo file có sẵn kết quả
Em xin cảm ơn Anh/Chị nhiều!
Tham khảo cách dùng code vba và kiểm tra kết quả nha
Mã:
Option Explicit
Sub Join_Name()
    Dim Lr&, i&, Arr(), Res(), k&, a&, b&, c&, Tmp$
    With Sheets("Sheet1")
        Lr = .Range("B" & Rows.Count).End(xlUp).Row
        Arr = .Range("B5:B" & Lr).Value
        ReDim Res(1 To UBound(Arr), 1 To 3)
        For i = 1 To UBound(Arr)
            k = k + 1
            Res(k, 1) = Cvt_vn(Arr(i, 1))
            Res(k, 2) = LCase(Res(k, 1))
            For a = 1 To Len(Res(k, 2))
                If Mid(Res(k, 2), a, 1) = " " Then b = b + 1
            Next a
            For c = 0 To b - 1
                Tmp = Tmp & Left(Split(Res(k, 2), " ")(c), 1)
            Next c
            Res(k, 3) = Split(Res(k, 2), " ")(b) & Tmp
            b = 0: Tmp = ""
        Next i
        If k Then
            .Range("G5:I2000").ClearContents
            .Range("G5").Resize(k, 3).Value = Res
            MsgBox "Done"
        Else
            MsgBox "No Data"
        End If
    End With
End Sub
Function Cvt_vn(ByVal sContent As String) As String
     Dim i&, intCode&, sChar$, sConvert$
     Cvt_vn = AscW(sContent)
     For i = 1 To Len(sContent)
        sChar = Mid(sContent, i, 1)
        If sChar <> "" Then
            intCode = AscW(sChar)
        End If
        Select Case intCode
            Case 273
                sConvert = sConvert & "d"
            Case 272
                sConvert = sConvert & "D"
            Case 224, 225, 226, 227, 259, 7841, 7843, 7845, 7847, 7849, 7851, 7853, 7855, 7857, 7859, 7861, 7863
                sConvert = sConvert & "a"
            Case 192, 193, 194, 195, 258, 7840, 7842, 7844, 7846, 7848, 7850, 7852, 7854, 7856, 7858, 7860, 7862
                sConvert = sConvert & "A"
            Case 232, 233, 234, 7865, 7867, 7869, 7871, 7873, 7875, 7877, 7879
                sConvert = sConvert & "e"
            Case 200, 201, 202, 7864, 7866, 7868, 7870, 7872, 7874, 7876, 7878
                sConvert = sConvert & "E"
            Case 236, 237, 297, 7881, 7883
                sConvert = sConvert & "i"
            Case 204, 205, 296, 7880, 7882
                sConvert = sConvert & "I"
            Case 242, 243, 244, 245, 417, 7885, 7887, 7889, 7891, 7893, 7895, 7897, 7899, 7901, 7903, 7905, 7907
                sConvert = sConvert & "o"
            Case 210, 211, 212, 213, 416, 7884, 7886, 7888, 7890, 7892, 7894, 7896, 7898, 7900, 7902, 7904, 7906
                sConvert = sConvert & "O"
            Case 249, 250, 361, 432, 7909, 7911, 7913, 7915, 7917, 7919, 7921
                sConvert = sConvert & "u"
            Case 217, 218, 360, 431, 7908, 7910, 7912, 7914, 7916, 7918, 7920
                sConvert = sConvert & "U"
            Case 253, 7923, 7925, 7927, 7929
                sConvert = sConvert & "y"
            Case 221, 7922, 7924, 7926, 7928
                sConvert = sConvert & "Y"
            Case Else
                sConvert = sConvert & sChar
        End Select
     Next
     Cvt_vn = sConvert
  End Function
 

File đính kèm

Code trong CVT_vn xưa lắm rồi. Bi giờ có một số chỉnh sửa hiệu quả về tốc độ hơn.
Điển hình, chuỗi nạp không phải qua ByVal, cứ ByRef và dùng hàm Mid chỉnh ngay trên chuỗi nạp.
Phép nói chuỗi "&" dùng nhiều sẽ tốn tài nguyên máy.
 
Tham khảo cách dùng code vba và kiểm tra kết quả nha
Mã:
Option Explicit
Sub Join_Name()
    Dim Lr&, i&, Arr(), Res(), k&, a&, b&, c&, Tmp$
    With Sheets("Sheet1")
        Lr = .Range("B" & Rows.Count).End(xlUp).Row
        Arr = .Range("B5:B" & Lr).Value
        ReDim Res(1 To UBound(Arr), 1 To 3)
        For i = 1 To UBound(Arr)
            k = k + 1
            Res(k, 1) = Cvt_vn(Arr(i, 1))
            Res(k, 2) = LCase(Res(k, 1))
            For a = 1 To Len(Res(k, 2))
                If Mid(Res(k, 2), a, 1) = " " Then b = b + 1
            Next a
            For c = 0 To b - 1
                Tmp = Tmp & Left(Split(Res(k, 2), " ")(c), 1)
            Next c
            Res(k, 3) = Split(Res(k, 2), " ")(b) & Tmp
            b = 0: Tmp = ""
        Next i
        If k Then
            .Range("G5:I2000").ClearContents
            .Range("G5").Resize(k, 3).Value = Res
            MsgBox "Done"
        Else
            MsgBox "No Data"
        End If
    End With
End Sub
Function Cvt_vn(ByVal sContent As String) As String
     Dim i&, intCode&, sChar$, sConvert$
     Cvt_vn = AscW(sContent)
     For i = 1 To Len(sContent)
        sChar = Mid(sContent, i, 1)
        If sChar <> "" Then
            intCode = AscW(sChar)
        End If
        Select Case intCode
            Case 273
                sConvert = sConvert & "d"
            Case 272
                sConvert = sConvert & "D"
            Case 224, 225, 226, 227, 259, 7841, 7843, 7845, 7847, 7849, 7851, 7853, 7855, 7857, 7859, 7861, 7863
                sConvert = sConvert & "a"
            Case 192, 193, 194, 195, 258, 7840, 7842, 7844, 7846, 7848, 7850, 7852, 7854, 7856, 7858, 7860, 7862
                sConvert = sConvert & "A"
            Case 232, 233, 234, 7865, 7867, 7869, 7871, 7873, 7875, 7877, 7879
                sConvert = sConvert & "e"
            Case 200, 201, 202, 7864, 7866, 7868, 7870, 7872, 7874, 7876, 7878
                sConvert = sConvert & "E"
            Case 236, 237, 297, 7881, 7883
                sConvert = sConvert & "i"
            Case 204, 205, 296, 7880, 7882
                sConvert = sConvert & "I"
            Case 242, 243, 244, 245, 417, 7885, 7887, 7889, 7891, 7893, 7895, 7897, 7899, 7901, 7903, 7905, 7907
                sConvert = sConvert & "o"
            Case 210, 211, 212, 213, 416, 7884, 7886, 7888, 7890, 7892, 7894, 7896, 7898, 7900, 7902, 7904, 7906
                sConvert = sConvert & "O"
            Case 249, 250, 361, 432, 7909, 7911, 7913, 7915, 7917, 7919, 7921
                sConvert = sConvert & "u"
            Case 217, 218, 360, 431, 7908, 7910, 7912, 7914, 7916, 7918, 7920
                sConvert = sConvert & "U"
            Case 253, 7923, 7925, 7927, 7929
                sConvert = sConvert & "y"
            Case 221, 7922, 7924, 7926, 7928
                sConvert = sConvert & "Y"
            Case Else
                sConvert = sConvert & sChar
        End Select
     Next
     Cvt_vn = sConvert
  End Function
Dạ, em cảm ơn ạ!
Bài đã được tự động gộp:

Bạn thử ví dụ: "Đỗ Đại Học"
Dạ, em cảm ơn ạ!
 
Web KT

Bài viết mới nhất

Back
Top Bottom