Lấy chữ cái đầu trong họ – tên

Chia sẻ bởi:hands
★★★★★
Quảng cáo

Chào các anh chị,

Làm ơn chỉ giúp em xử lý vấn đề này với ạh.
Trong một ô họ tên, ví dụ "Mai Phương Thúy" em làm nào để có thể lấy ra được 3 chữ cái đầu trong mỗi chữ: M – Mai, P- Phương, T- Thúy.
Giúp em với nhé. Xin cảm ơn các anh chị.
Dungbko

Nếu ô C5 có chứa text "Mai Phương Thủy" thì mình sẽ lấy 3 chữ cái đầu bằng 3 công thức sau:
Chữ M – Mai:
=LEFT(C5,1)
Chữ P – Phương:
=MID(C5,FIND(" ",C5,1)+1,1)
Chữ T – Thuý:
=MID(C5,FIND(" ",C5,FIND(" ",C5,1)+1)+1,1)
Và cứ thế nếu còn chữ nào nữa.
Thân.

www.giaiphapexcel.com/diendan/threads/l%E1%BA%A5y-ch%E1%BB%AF-c%C3%A1i-%C4%91%E1%BA%A7u-trong-h%E1%BB%8D-t%C3%AAn.20182/

Kỹ năng giải quyết vấn đề hiệu quả
Khóa học SprinGO phù hợp

Kỹ năng giải quyết vấn đề hiệu quả

Mô tả Nội dung Đánh giá Tài nguyên KỸ NĂNG GIẢI QUYẾT VẤN ĐỀ HIỆU QUẢHiểu đúng vấn đề là một nửa của giải...

Xem khóa học
★★★★★ 5 ★ 1 👤 6 ▥ 0
Quảng cáo

Bạn nên đọc

6 Responses

  1. hands says:

    Làm ơn chỉ giúp em xử lý vấn đề này với ạh.
    Trong một ô họ tên, ví dụ "Mai Phương Thúy" em làm nào để có thể lấy ra được 3 chữ cái đầu trong mỗi chữ: M – Mai, P- Phương, T- Thúy.
    Dungbko

    Dùng cho tên có 6 từ :

    =LEFT(A1,1)&MID(A1,FIND(" ",A1)+1,1)&IF(ISERR(FIND(" ",A1,FIND(" ",A1)+1)),"",MID(A1,FIND(" ",A1,FIND(" ",A1)+1)+1,1))&IF(ISERR(FIND(" ",A1,FIND(" ",A1,FIND(" ",A1)+1)+1)),"",MID(A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1)+1)+1)+1,1))&IF(ISERR(FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1)+1)+1)+1)),"",MID(A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1)+1)+1)+1)+1,1))

    Đã viết thế thôi thà đừng viết còn hơn. Nhìn vô chóng mặt quá!
    Nếu muốn tổng quát cho mọi trường hợp thì ta nên dùng VBA thì hơn.
    Function tachChD(cel As String, Optional k As Long = 1)
    Dim arr() As String
    arr() = Split(cel, " ")
    tachChD = Left(arr(k – 1), 1)
    End Function
    Xem file!
    Thân.

    Po_pikachu đã dùng split rồi thì mình dùng thêm cái For nữa cho dễ hình dung :

    Function Firstchar(Str As String) As String
    Dim i As Byte
    Str = Trim(Str): Firstchar = Left(Str, 1)
    For i = 1 To Len(Str)
    If Mid(Str, i, 1) = " " Then Firstchar = Firstchar + Mid(Str, i + 1, 1)
    Next
    End Function

    Bạn hoangdanh282vn chỉ mình làm đi!
    mình copy cái công thức của bạn vào cell trong sheet sao nó không ra đáp số gì cả mà nó ra nguyên cái công thức luôn à!

    [COLOR=#000000][COLOR=#007700]Function [/COLOR][COLOR=#0000BB]Firstchar[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Str [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]String[/COLOR][COLOR=#007700]) As [/COLOR][COLOR=#0000BB]String
    Dim i [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Byte
    Str [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Trim[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Str[/COLOR][COLOR=#007700]): [/COLOR][COLOR=#0000BB]Firstchar [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Left[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Str[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700])
    For [/COLOR][COLOR=#0000BB]i [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]1 To Len[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Str[/COLOR][COLOR=#007700])
        If [/COLOR][COLOR=#0000BB]Mid[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Str[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]) = [/COLOR][COLOR=#DD0000]" " [/COLOR][COLOR=#0000BB]Then Firstchar [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Firstchar [/COLOR][COLOR=#007700]+ [/COLOR][COLOR=#0000BB]Mid[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Str[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]i [/COLOR][COLOR=#007700]+ [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700])
    [/COLOR][COLOR=#0000BB]Next
    End [/COLOR][COLOR=#007700]Function[/COLOR][/COLOR]

    Đó là UDF, là hàm tự tạo. Muốn sử dụng bạn phải cho nó vào thư viện hay trong module thi mới dùng được.
    Copy đoạn code trên, bấm Alt+F11. Vào Insert, chọn module, ok
    Doubleclick vào module, vào khung soạn thảo bên phải và paste đoạn code trên vào.
    Thoát ra ngoài màn hình excel bình thường thì ta có thể sử dụng được .
    VD tại ô B1 : =Firstchar(A1)

  2. hands says:

    Nhớ phải dùng hàm TRIM cho cell trước cái nhé!
    Mà phải là TRIM của hàm Excel (chứ không phải TRIM trong VBA)… Nếu ko kết quả tèo luôn

    Xin được góp vui thêm 1 cách không dùng vòng lặp.

    Function KTD(str As String) As String
        If InStr(1, str, " ") = 0 Then
            KTD = Left(str, 1)
        Else
            KTD = Left(str, 1) & KTD(Mid(str, InStr(1, str, " ") + 1))
        End If
    End Function

    Lại là "Đệ quy" —> Hôm trước đã nghĩ ra sẽ làm theo hướng này nhưng vụ đệ quy này xem ra vẫn chưa thông lắm

    Xin được góp vui thêm 1 cách không dùng vòng lặp.

    Function KTD(str As String) As String
        If InStr(1, str, " ") = 0 Then
            KTD = Left(str, 1)
        Else
            KTD = Left(str, 1) & KTD(Mid(str, InStr(1, str, " ") + 1))
        End If
    End Function

    Cảm ơn bạn!

    Có thể dùng hàm TRIM của Excel trong VBA nhưng phải viết như thế này:
    txt = Application.WorksheetFunction.Trim(txt)

  3. hands says:

    Mình xin hỏi trường hợp gần giống như yêu cầu của bạn chủ topic nhưng chỉ lấy chữ cái đầu của Tên thôi thì dùng công thức thế nào cho những người họ tên không chỉ gồm 3 chữ như Mai Phương Thuý mà có thể gồm 4 chữ hay chỉ có 2 chữ ạ???

    Dùng 1 trong những hàm kể từ bài #4,

    Nếu ô C5 có chứa text "Mai Phương Thủy" thì mình sẽ lấy 3 chữ cái đầu bằng 3 công thức sau:
    Chữ M – Mai:
    =LEFT(C5,1)
    Chữ P – Phương:
    =MID(C5,FIND(" ",C5,1)+1,1)
    Chữ T – Thuý:
    =MID(C5,FIND(" ",C5,FIND(" ",C5,1)+1)+1,1)
    Và cứ thế nếu còn chữ nào nữa.
    Thân.

    và thêm như vầy:
    =RIGHT(ChuCaiDau(A1), 1)

    Hoặc là viết hàm mới:
    Function KTDauCuaTen(byVal s As String) As String
    KTDauCuaTen = MID(s, InStrRev(s & " ", " "), 1)
    End Function

    Bác ơi cho em hỏi tí ạ?
    Nếu muốn lấy từng chữ cái của họ và tên mình làm sao ạ?
    Ví dụ: Nguyễn Hoàng Văn Tùng Minh
    Viết code để lấy từng chữ cái của người có tên ở ví dụ trên ạ.
    Em cảm ơn!

    Thử code này.

    Public Function LayKyTuDau(str As String) As String
        Dim i As Integer, s As String, sSplit
        sSplit = Split(str, " ")
        For i = 0 To UBound(sSplit)
            s = s + Left(sSplit(i), 1)
        Next i
        LayKyTuDau = s
    End Function

    Dạ, em cảm ơn bác đoạn code. NHƯNG Ý CỦA EM LÀ MUỐN LẤY TỪNG CHỮ MỘT RA Ạ.
    VÍ DỤ: NGUYỄN HOÀNG VĂN TÙNG MINH
    SAU KHI TÁCH:
    N G U Y Ễ N H O À N G V Ă N T U N G M I N H
    Những chữ cái thể hiện trên từng ô cell ạ.

    Đây, có tuỳ chọn tách theo lý tự gì luôn nha.

    Function T_Tachchuoi(Str As String, Optional txt As String)
    Application.Volatile
    Dim i As Integer, z As Integer, x As Integer, a As Integer
    Name = Application.WorksheetFunction.Trim(Application.WorksheetFunction.Substitute(Str, Chr(160), Chr(32)))
    z = 0: a = 1: x = 1
    For i = 1 To Len(Name)
         If Mid(Name, i, Len(txt)) = txt Or i = Len(Name) Then z = z + 1
    Next
    ReDim Arr(0, 1 To z)
    For i = 2 To Len(Name) + 1
         If Mid(Name, i, Len(txt)) = txt Or i = Len(Name) Then
              Arr(0, x) = Replace(Mid(Name, a, i - a + Len(txt)), txt, "")
              a = i
              x = x + 1
         End If
    Next
    T_Tachchuoi = Arr
    End Function

    bác hướng dẫn giúp cách dùng ạ

    Dán vào module rồi sử dụng hàm nha bác, hàm là =T_Tachchuoi("Chuỗi cần tách", "tách tại ký tự gì, bỏ trống là tách từng ký tự")

    cái mình cần muốn giúp là làm sao tên của người đó ta dùng hàm là được tách từng chữ cái ra từng ô cell 1
    ví dụ: LÊ BÍCH TRÂM nằm ở ô cell là A1 đi
    khi dùng hàm tách các ký tự tại ô A1 ta có B1: "L", C1: "Ê", D1: " ",E1: "B", F1: "I"; và …. tới ô cuối cùng là "M"

    Cũng hàm của bác có thể chỉnh T_Tachchuoi(A1,1)
    A1: là ô cần tách
    1: là vị trí ký tự ta cần tách á ( có thể ta lấy ở vị trí số 2, 3, 4 , vị trí n)

  4. hands says:

    Po_pikachu đã dùng split rồi thì mình dùng thêm cái For nữa cho dễ hình dung :

    Function Firstchar(Str As String) As String
    Dim i As Byte
    Str = Trim(Str): Firstchar = Left(Str, 1)
    For i = 1 To Len(Str)
    If Mid(Str, i, 1) = " " Then Firstchar = Firstchar + Mid(Str, i + 1, 1)
    Next
    End Function

    bác ơi cho mình hỏi thăm tí ạ!
    ví dụ mình cho một cái tên: LÊ THỊ KIM BÍCH được nằm tại ô cell là A1
    có thể viết hàm tách từng chữ cái 1 trong ô cell A1 không ạ
    như: Tachten(A1,1)
    A1: là ô cell chứa chuổi ký tự cần tách
    1: là vị trí ký tự cần tách
    kính nhờ bác giúp tí ạ, em cảm ơn rất nhiều.

    Tham khảo . . .

    CẢM ƠN BÁC NHIỀU NHA, ĐÚNG Ý QUÁ RỒI Ạ, TRIỆU LIKE ^^

    Thêm một cách nửa không biết được không.

    Cảm ơn bác nhiều nha, quá tuyệt vời ạ

  5. hands says:

    nếu tên dài ví dụ như: Nguyễn Trần Mai Thị Ngọc Ánh Tuyết thì cũng khó: Có một cách đơn giản cực kỳ: Text to columm—-> sau đó lấy chữ cái đầu tiên (Cứ thoải mái cho tên có 20 chữ=20 cột) sau đó trim() là OK luôn.

    Nếu dùng excel 365 thì hàm giải quyết được mặc dù nó hơi dài.

  6. hands says:

    Xin được góp vui thêm 1 cách không dùng vòng lặp.

    Function KTD(str As String) As String
        If InStr(1, str, " ") = 0 Then
            KTD = Left(str, 1)
        Else
            KTD = Left(str, 1) & KTD(Mid(str, InStr(1, str, " ") + 1))
        End If
    End Function

    Em hỏi đoạn này với ạ:

    KTD = Left(str, 1) & KTD(Mid(str, InStr(1, str, " ") + 1))

    Left(str,1) => kết quả chữ cái đầu
    nhưng KTD(Mid(str, Instr(1,str,"")+1 => em không hiểu sao nó có thể ra được các chữ cái Khác.
    VD Pham Anh => PA thì oke nhưng Pham Anh Tao => thì sao ra dược "AT"
    => nhờ cụ giải thích thêm em đoạn này với ạ! Em cám ơn ạ

    Function KTD(str As String) As String
        If InStr(1, str, " ") = 0 Then
            KTD = Left(str, 1)
        Else
            KTD = Left(str, 1) & KTD(Mid(str, InStr(1, str, " ") + 1))
            MsgBox KTD
        End If
    End Function

    2983

Leave a Reply

Your email address will not be published. Required fields are marked *

Quảng cáo

Cũ vẫn chất

Xem thêm