Các phương pháp tách họ và tên đề nghị post ở đây

  • Thread starter Thread starter daerty5
  • Ngày gửi Ngày gửi
Liên hệ QC
Có cái này tách họ tên không biết có dùng dc ko ạ... các cao thủ cho ý kiến.
 

File đính kèm

Lấy Họ:
=LEFT(A1,LEN(A1)-FIND(" ",MID(A1,LEN(A1),1)&MID(A1,LEN(A1)-1,1)&MID(A1,LEN(A1)-2,1)&MID(A1,LEN(A1)-3,1)&MID(A1,LEN(A1)-4,1)&MID(A1,LEN(A1)-5,1)&MID(A1,LEN(A1)-6,1)&MID(A1,LEN(A1)-7,1)))

Cảm ơn anh. Nhưng cách này sẽ bị lỗi nếu như gặp TH cả họ tên dưới 7 ký tự, ví dụ: Lê Hà. Có cách nào để khắc phục không ạ. Em không biết dùng VBA =(
 
Cảm ơn anh. Nhưng cách này sẽ bị lỗi nếu như gặp TH cả họ tên dưới 7 ký tự, ví dụ: Lê Hà. Có cách nào để khắc phục không ạ. Em không biết dùng VBA =(

Mình có cách khác tổng quát hơn nhưng hơi khó hiểu:
Giả thiết A1 chưa "Nguyễn Duy Tuân"
Công thức lấy tên như sau:
=RIGHT(A1,LEN(A1)- FIND("*", SUBSTITUTE(A1," ","*", LEN(A1)-LEN( SUBSTITUTE(A1," ","")))))
 
Mình có cách khác tổng quát hơn nhưng hơi khó hiểu:
Giả thiết A1 chưa "Nguyễn Duy Tuân"
Công thức lấy tên như sau:
=RIGHT(A1,LEN(A1)- FIND("*", SUBSTITUTE(A1," ","*", LEN(A1)-LEN( SUBSTITUTE(A1," ","")))))
Many thanks Đại ca. Cái này áp dụng tổng quát được luôn ấy
:<>
.Này nếu nói hiểu thì em hiểu được nhưng để nghĩ ra công thức thì em chưa tới trình :D Cảm ơn anh
 
Many Cảm ơn Đại ca. Cái này áp dụng tổng quát được luôn ấy
:<>
.Này nếu nói hiểu thì em hiểu được nhưng để nghĩ ra công thức thì em chưa tới trình :D Cảm ơn anh
Thêm một cách nửa cho bạn.
Mã:
=TRIM(RIGHT(SUBSTITUTE(A1;" ";REPT(" ";200));200))
 
Many Cảm ơn Đại ca. Cái này áp dụng tổng quát được luôn ấy
:<>
.Này nếu nói hiểu thì em hiểu được nhưng để nghĩ ra công thức thì em chưa tới trình :D Cảm ơn anh
Thêm cách nữa để bạn tham khảo cho vui:
Mã:
B1=MID(A1,1/LOOKUP(2,1/FIND(" ",A1,ROW($1:$50)))+1,50)
Enter.

Thân
 
mình cần tách chuỗi 123456789(abc..)1234 thành 3 cột riêng biệt, gồm: cột 1 là 123456789, cột 2 là a,b,c.., cột 3 là 1234, trong đó (abc..) là một chữ trong bảng chữ cái abc.., cả nhà giúp mình với nhé, tks all
gui dien dan excel.png
 
Mình làm kiểu gì cũng lỗi lòi ra :( được 1 lúc lại lỗi
 
Không phải file của em. Nhưng tại em muốn coi thử nên tạo thử như vậy để xem code và học ạ
chạy thử code này
Mã:
Sub abc()
Dim Nguon
Dim Kq
Dim i, j, k, t
Nguon = Sheet1.Range("A2:A4")
ReDim Kq(1 To UBound(Nguon), 1 To 3)
For i = 1 To UBound(Nguon)
    k = ""
    For j = 2 To Len(Nguon(i, 1))
        If IsNumeric(Mid(Nguon(i, 1), j, 1)) = False Then
            k = k & Mid(Nguon(i, 1), j, 1)
        Else
            If IsNumeric(Mid(Nguon(i, 1), j - 1, 1)) = False Then
                Exit For
            End If
        End If
    Next j
    Kq(i, 2) = k
    t = Split(Replace(Nguon(i, 1), k, " "))
    Kq(i, 1) = t(0)
    Kq(i, 3) = t(1)
Next i
Sheet1.Range("B2:D4") = Kq
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Không phải file của em. Nhưng tại em muốn coi thử nên tạo thử như vậy để xem code và học ạ
Code khác
Mã:
Sub ABC()
  Dim sArr(), Res()
  Dim i&, jD&, jC&, n
  sArr = Sheet1.Range("A2", Sheet1.Range("A1000000").End(xlUp)).Value
  ReDim Res(1 To UBound(sArr), 1 To 3)
  For i = 1 To UBound(sArr)
    n = Len(sArr(i, 1))
    jD = 0: jC = 0
    For j = 2 To n
      If IsNumeric(Mid(sArr(i, 1), j, 1)) = False And jD = 0 Then jD = j
      If IsNumeric(Mid(sArr(i, 1), j, 1)) And jD > 0 Then
        jC = j: Exit For
      End If
    Next j
    Res(i, 1) = Mid(sArr(i, 1), 1, jD - 1)
    Res(i, 2) = Mid(sArr(i, 1), jD, jC - jD)
    Res(i, 3) = Mid(sArr(i, 1), jC, n - jC + 1)
  Next i
  Sheet1.Range("B2:D2").Resize(UBound(Res)) = Res
End Sub
 
Code khác
Mã:
Sub ABC()
  Dim sArr(), Res()
  Dim i&, jD&, jC&, n
  sArr = Sheet1.Range("A2", Sheet1.Range("A1000000").End(xlUp)).Value
  ReDim Res(1 To UBound(sArr), 1 To 3)
  For i = 1 To UBound(sArr)
    n = Len(sArr(i, 1))
    jD = 0: jC = 0
    For j = 2 To n
      If IsNumeric(Mid(sArr(i, 1), j, 1)) = False And jD = 0 Then jD = j
      If IsNumeric(Mid(sArr(i, 1), j, 1)) And jD > 0 Then
        jC = j: Exit For
      End If
    Next j
    Res(i, 1) = Mid(sArr(i, 1), 1, jD - 1)
    Res(i, 2) = Mid(sArr(i, 1), jD, jC - jD)
    Res(i, 3) = Mid(sArr(i, 1), jC, n - jC + 1)
  Next i
  Sheet1.Range("B2:D2").Resize(UBound(Res)) = Res
End Sub
Anh Hiếu ơi dùng
VBScript.RegExp
Được không anh.
 
Anh Hiếu ơi dùng
VBScript.RegExp
Được không anh.
Em Vân thử dùng cách này mong anh Hiếu góp ý thêm ạ
Mã:
Sub Main()
Call Cot_1
Call Cot_3
Call Cot_2
End Sub

Sub Cot_2()
With CreateObject("VBScript.RegExp")
   For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
      .Global = True
      .Pattern = "\d"
   Sheet1.Cells(i, 3) = .Replace(Sheet1.Cells(i, 1), "")
   Next
End With
End Sub
Sub Cot_3()
With CreateObject("VBScript.RegExp")
   For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
      .Global = True
      .Pattern = ".*\D"
   Sheet1.Cells(i, 4) = .Replace(Sheet1.Cells(i, 1), "")
   Next
End With
End Sub
Sub Cot_1()
With CreateObject("VBScript.RegExp")
   For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
      .Global = True
      .Pattern = "\D.*"
   Sheet1.Cells(i, 2) = .Replace(Sheet1.Cells(i, 1), "")
   Next
End With
End Sub
Bài đã được tự động gộp:
 

File đính kèm

Lần chỉnh sửa cuối:
Tách số ra khỏi chữ:

' chuoi là chuỗi cần tách
Dim chuoiKT(0 To 1) ' 0 sẽ là chuỗi số và 1 sẽ là chuỗi mẫu tự
chuoiKT(0) = chuoi
chuoiKT(1) = chuoi
For i = 1 To Len(chuoi)
Mid(chuoiKT(-IsNumeric(Mid(chuoi, i, 1))), i, 1) = " " ' ký tự không đúng dạng thì đổi thành khoảng trắng
Next i
chuoiKT(0) = Split(Application.Trim(chuoiKT(0)), " ")
chuoiKT(1) = Split(Application.Trim(chuoiKT(1)), " ")
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom