Xin code hoặc công thức lấy chữ lót và tên từ cột họ và tên (1 người xem)

  • Thread starter Thread starter amly1980
  • Ngày gửi Ngày gửi

Người dùng đang xem chủ đề này

Code đây nhé, Mình chỉ viết lại theo công thức của Thầy concogia thôi nhé
PHP:
Function Tachchuoi(st As String) As String
Dim Kq As String, b As String, c As String
    b = Replace(st, " ", Application.Rept(" ", Len(st)))
    c = Right(b, Len(st) * 2)
    Kq = Trim(Replace(c, Application.Rept(" ", Len(st)), " "))
Tachchuoi = Kq
End Function
=tachchuoi(o can tach)
 
Upvote 0
Tham khảo thêm cách này
PHP:
Function TachHoTen(cell As String, Index As Long ) As String
    With CreateObject("vbscript.regexp")
        .Pattern = "(\S+)(.*)(\s\S+)"
        TachHoTen = Trim(.Replace(Trim(cell), "$" & Index))
    End With
End Function
Cách dùng: 1 lấy họ, 2 lấy tên lót, 3 lấy tên
=tachhoten(A1,1)
=tachhoten(A1,2)
=tachhoten(A1,3)
 
Upvote 0
Tham khảo thêm cách này
PHP:
Function TachHoTen(cell As String, Index As Long ) As String
    With CreateObject("vbscript.regexp")
        .Pattern = "(\S+)(.*)(\s\S+)"
        TachHoTen = Trim(.Replace(Trim(cell), "$" & Index))
    End With
End Function
Cách dùng: 1 lấy họ, 2 lấy tên lót, 3 lấy tên
=tachhoten(A1,1)
=tachhoten(A1,2)
=tachhoten(A1,3)

Nếu tên chỉ có 1 chữ thì code trên không phân biệt được đâu là họ và đâu là tên.
 
Upvote 0
Hàm Replace của RegExp không bẫy lỗi cho nên khi tên chỉ có 1 từ thì nó không hoạt động; tức là nó không replace gì cả và trả về nguyên chuỗi. Ví dụ nếu nhập chuỗi "Trần" thì cả họ, tên, đệm đều ra "Trần" tuốt.

Để bẫy lỗi, phải dùng hàm Test. Tức là đại khái:

If .test(cell) Then
TachHoTen = Trim(.Replace(Trim(cell)), "$" & Index)) ' có tên và đệm
Else
TachHoTen = IIf(Index <= 1, cell, "") ' chỉ có họ
End If

Nhưng nếu đã test thì lấy thẳng SubMatches nhanh hơn Replace

If .test(cell) Then
TachHoTen = Trim(.Execute(Trim(cell)).Item(0).submatches(Index - 1))
Else
TachHoTen = IIf(Index <= 1, cell, "")
End If
 
Upvote 0

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

Back
Top Bottom