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

Liên hệ QC
Rất cảm ơn bạn
Nhưng bạn ơi tôi chưa biết gì về CODE cả - tôi mới chập chững học excel mà . Bạn có thể chỉ tôi cách dùng CODE không ? Bạn làm ơn chỉ theo từng bước một nhé - cảm on ban
Cho dữ liệu vào Như bạn rồi bấm nút tách thế là xong cần gì biết code.
 
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

  • Tách họ tên.xlsx
    14.8 KB · Đọc: 9
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

  • Tach.xlsm
    18.8 KB · Đọc: 8
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

  • DEMO.xlsb
    16.5 KB · Đọc: 7
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom