Tách toàn bộ ký tự đầu của một chuỗi

Blue Softs Liên hệ QC

tttngoc2021

Thành viên mới
Tham gia
14/10/21
Bài viết
3
Được thích
2
Mình muốn tách toàn bộ ký tự đầu để tạo chuỗi có hàm nào không xin chỉ giúp: Phan Thanh Nhan tách thành PTN (chỉ giữ ký tự đầu). Cảm ơn
 

xuongrongdat

Có bao giờ bạn tự hỏi "Tôi là ai?"
Tham gia
30/6/08
Bài viết
1,391
Được thích
1,311
Donate (Momo)
Donate
Nghề nghiệp
Vô tư cùng bạn bè đi khắp nơi.
Mình muốn tách toàn bộ ký tự đầu để tạo chuỗi có hàm nào không xin chỉ giúp: Phan Thanh Nhan tách thành PTN (chỉ giữ ký tự đầu). Cảm ơn
Nếu bạn sử dụng Excel 2016 trở lên thì bạn làm cách này nhanh lắm nè bạn:
1634196064587.png
 

tttngoc2021

Thành viên mới
Tham gia
14/10/21
Bài viết
3
Được thích
2
Cảm ơn bạn nhé
Nếu bạn sử dụng Excel 2016 trở lên thì bạn làm cách này nhanh lắm nè bạn:
View attachment 267726
cảm ơn bạn nhé
Bài đã được tự động gộp:

Cảm ơn bạn nhé

cảm ơn bạn nhé
Mà mình office 2010 thì làm sao nhỉ
Bài đã được tự động gộp:

Nếu bạn sử dụng Excel 2016 trở lên thì bạn làm cách này nhanh lắm nè bạn:
View attachment 267726
Bạn nếu Excel 2010 thì làm như thế nào xin chỉ giúp
 
Lần chỉnh sửa cuối:

hoangminhtien

Thành viên gắn bó
Tham gia
29/2/08
Bài viết
1,635
Được thích
2,154
Nghề nghiệp
Mechanical Engineering
Mình muốn tách toàn bộ ký tự đầu để tạo chuỗi có hàm nào không xin chỉ giúp: Phan Thanh Nhan tách thành PTN (chỉ giữ ký tự đầu). Cảm ơn
Flash fill như xuongrongdat là tốt nhất trong trường hợp này rồi nhưng lại có từ version 2016 trở lên
Hàm thì nó không tối ưu bằng VBA, nhưng nếu tên không dài thì dùng tạm hàm này vậy.
 

File đính kèm

  • Tách ký tự đầu.xlsx
    9.1 KB · Đọc: 10

Binbo2020

Thành viên tích cực
Tham gia
10/11/11
Bài viết
885
Được thích
890
Bạn nếu Excel 2010 thì làm như thế nào xin chỉ giúp
Với excel đồ cổ thì việc nối ký tự luôn là một mớ bòng bong, đi gỡ oải lắm. Xài tạm hàm chạy bằng cơm vậy, tên viết tắt chắc dài không quá 5 ký đâu nhỉ (dài hơn chạy bằng cơm cho nhanh) A4 là ô chứa dữ liệu.
Mã:
=LEFT(A4;1)&MID(A4;FIND(" ";A4)+1;1)&IF(ISERR(FIND(" ";A4;FIND(" ";A4)+1));"";MID(A4;FIND(" ";A4;FIND(" ";A4)+1)+1;1))&IF(ISERR(FIND(" ";A4;FIND(" ";A4;FIND(" ";A4)+1)+1));"";MID(A4;FIND(" ";A4;FIND(" ";A4;FIND(" ";A4)+1)+1)+1;1))&IF(ISERR(FIND(" ";A4;FIND(" ";A4;FIND(" ";A4;FIND(" ";A4)+1)+1)+1));"";MID(A4;FIND(" ";A4;FIND(" ";A4;FIND(" ";A4;FIND(" ";A4)+1)+1)+1)+1;1))
 

tttngoc2021

Thành viên mới
Tham gia
14/10/21
Bài viết
3
Được thích
2
Với excel đồ cổ thì việc nối ký tự luôn là một mớ bòng bong, đi gỡ oải lắm. Xài tạm hàm chạy bằng cơm vậy, tên viết tắt chắc dài không quá 5 ký đâu nhỉ (dài hơn chạy bằng cơm cho nhanh) A4 là ô chứa dữ liệu.
Mã:
=LEFT(A4;1)&MID(A4;FIND(" ";A4)+1;1)&IF(ISERR(FIND(" ";A4;FIND(" ";A4)+1));"";MID(A4;FIND(" ";A4;FIND(" ";A4)+1)+1;1))&IF(ISERR(FIND(" ";A4;FIND(" ";A4;FIND(" ";A4)+1)+1));"";MID(A4;FIND(" ";A4;FIND(" ";A4;FIND(" ";A4)+1)+1)+1;1))&IF(ISERR(FIND(" ";A4;FIND(" ";A4;FIND(" ";A4;FIND(" ";A4)+1)+1)+1));"";MID(A4;FIND(" ";A4;FIND(" ";A4;FIND(" ";A4;FIND(" ";A4)+1)+1)+1)+1;1))
cảm ơn bạn nhé
Flash fill như xuongrongdat là tốt nhất trong trường hợp này rồi nhưng lại có từ version 2016 trở lên
Hàm thì nó không tối ưu bằng VBA, nhưng nếu tên không dài thì dùng tạm hàm này vậy.
cảm ơn nhé
 

xuongrongdat

Có bao giờ bạn tự hỏi "Tôi là ai?"
Tham gia
30/6/08
Bài viết
1,391
Được thích
1,311
Donate (Momo)
Donate
Nghề nghiệp
Vô tư cùng bạn bè đi khắp nơi.

vanthinh3101

Thành viên tích cực
Tham gia
24/1/15
Bài viết
1,039
Được thích
1,288
Giới tính
Nam
Nghề nghiệp
Banker
Góp vui công thức dùng cho Excel 2016 trở lên có hàm TEXTJOIN()
Giả sử Họ tên ở ô A3:
PHP:
=TEXTJOIN("",TRUE,IFERROR(MID(" "&A3,FIND("@",SUBSTITUTE(" "&A3," ","@",ROW($A$1:$A$10)))+1,1),""))
Ctrl + Shift + Enter

Thêm 1 cách sử dụng VBA:
PHP:
Function GetFirstCharacters(SourceString As String)
    Dim Temp, Res()
    Dim I As Byte, K As Byte
    
    Temp = Split(" " & SourceString, " ")
    For I = LBound(Temp) To UBound(Temp)
        If Len(Temp(I)) Then
            K = K + 1
            ReDim Preserve Res(1 To K)
            Res(K) = Left(Temp(I), 1)
        End If
    Next I
    GetFirstCharacters = Join(Res, "")
End Function
 

VetMini

Chuyên gia GPE
Tham gia
21/12/12
Bài viết
12,315
Được thích
15,844
...
Thêm 1 cách sử dụng VBA:
PHP:
Function GetFirstCharacters(SourceString As String)
    Dim Temp, Res()
    Dim I As Byte, K As Byte
   
    Temp = Split(" " & SourceString, " ")
    For I = LBound(Temp) To UBound(Temp)
        If Len(Temp(I)) Then
            K = K + 1
            ReDim Preserve Res(1 To K)
            Res(K) = Left(Temp(I), 1)
        End If
    Next I
    GetFirstCharacters = Join(Res, "")
End Function
Code này rắc rối và nhiều kẽ hở lắm.
Điều đáng ghi nhớ: nếu split với dấu cách thì nên trim chuỗi trước. Trừ phi cần giữ lại đúng số dấu cách.

Dim e
For Each e in Split(Application.Trim(SourceString), " ")
GetFirstCharacters = GetFirstCharacters & Left(e, 1)
Next e
 

chiendich

Thành viên hoạt động
Tham gia
13/5/09
Bài viết
182
Được thích
197
Giới tính
Nam
Nghề nghiệp
74 Quê tôi
Mình muốn tách toàn bộ ký tự đầu để tạo chuỗi có hàm nào không xin chỉ giúp: Phan Thanh Nhan tách thành PTN (chỉ giữ ký tự đầu). Cảm ơn
Dùng hàm tự tạo trên GPE.
Mã:
Option Explicit
Function AbbName(ByVal Text As String, Optional ByVal Delimiter As String = vbNullString, Optional ByVal IncName As Boolean = False) As String
  Dim sPart1 As String, sPart2 As String, sp As String, lPos As Long
  sp = Space(1)
  If InStr(1, Text, sp) Then
    With WorksheetFunction
      sPart1 = .Trim(Text)
      lPos = InStrRev(sPart1, Space(1))
      sPart2 = Mid(sPart1, lPos + 1, Len(sPart1))
      sPart1 = Mid(sPart1, 1, lPos - 1)
      sPart1 = "{""" & Replace(sPart1, " ", """;""") & """}"
      sPart1 = Join(Evaluate("Transpose(LEFT(" & sPart1 & ",1))"), Delimiter)
    End With
    AbbName = sPart1 & Delimiter & IIf(IncName, Left(sPart2, 1), sPart2)
  End If
End Function
Cú pháp:
Mã:
=AbbName(C3,"",TRUE)
 

File đính kèm

  • TenTat.xls
    35 KB · Đọc: 5

vanthinh3101

Thành viên tích cực
Tham gia
24/1/15
Bài viết
1,039
Được thích
1,288
Giới tính
Nam
Nghề nghiệp
Banker
Code này rắc rối và nhiều kẽ hở lắm.
Điều đáng ghi nhớ: nếu split với dấu cách thì nên trim chuỗi trước. Trừ phi cần giữ lại đúng số dấu cách.

Dim e
For Each e in Split(Application.Trim(SourceString), " ")
GetFirstCharacters = GetFirstCharacters & Left(e, 1)
Next e
Em cám ơn bác đã chỉ dạy.
 

Nhattanktnn

Thành viên gắn bó
Tham gia
11/11/16
Bài viết
1,830
Được thích
1,907
Donate (Momo)
Donate
Góp vui công thức dùng cho Excel 2016 trở lên có hàm TEXTJOIN()
Giả sử Họ tên ở ô A3:
PHP:
=TEXTJOIN("",TRUE,IFERROR(MID(" "&A3,FIND("@",SUBSTITUTE(" "&A3," ","@",ROW($A$1:$A$10)))+1,1),""))
Ctrl + Shift + Enter

Thêm 1 cách sử dụng VBA:
PHP:
Function GetFirstCharacters(SourceString As String)
    Dim Temp, Res()
    Dim I As Byte, K As Byte
 
    Temp = Split(" " & SourceString, " ")
    For I = LBound(Temp) To UBound(Temp)
        If Len(Temp(I)) Then
            K = K + 1
            ReDim Preserve Res(1 To K)
            Res(K) = Left(Temp(I), 1)
        End If
    Next I
    GetFirstCharacters = Join(Res, "")
End Function
Cái hàm này sao bạn lại chọn hướng redim preserve rồi join lại mình thấy hơi cồng kềnh.
Vì chỉ xử lý chuỗi nên mình nghĩ khai báo biến txt, sau đó txt = txt & left(temp(i),1). kết quả hàm GetFirstCharacters = txt là được.
Mà theo mình biết, nếu có hướng làm khác thì không nên redim preserve mảng từng phần tử
 

vanthinh3101

Thành viên tích cực
Tham gia
24/1/15
Bài viết
1,039
Được thích
1,288
Giới tính
Nam
Nghề nghiệp
Banker
Cái hàm này sao bạn lại chọn hướng redim preserve rồi join lại mình thấy hơi cồng kềnh.
Vì chỉ xử lý chuỗi nên mình nghĩ khai báo biến txt, sau đó txt = txt & left(temp(i),1). kết quả hàm GetFirstCharacters = txt là được.
Mà theo mình biết, nếu có hướng làm khác thì không nên redim preserve mảng từng phần tử
Cám ơn bạn đã góp ý.
Bài #12, bác @VetMini cũng nêu vấn đề đó ra rồi.
Tôi xin được cảm ơn và tiếp thu.
 

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia
8/6/06
Bài viết
12,680
Được thích
19,320
@SA_DQ : đây là 1 trong những bước để con tạo Mã nhân viên cho công ty con theo cách bác gợi ý á. Con làm thủ công 1 lần. hi
Sớm nay mình mới tình cờ đọc được bài này của bạn & mình rất vui!
Sẵn đây xin mạn phép anh em (chắc trong DĐ không có chị nào lớn tuổi hơn mình!) mã nhân viên luôn có 2 phần; Mình tạm gọi 1 phần là đặc tính & phần định trị;
Phần đầu luôn gồm 3 ký tự & phần sau gồm 2 ký số (hay/& ký tự - nếu danh sách nhân viên cỡ vạn người)
Ví dụ:

STTMã NVHọ & Tên
1TTT01Trần Thành Trai
2TTT00Từ Thanh Tuấn
3TMH04Trần Thị Minh Hà
4TMH03Tạ Thị Minh Hà
5TMH02Trần Minh Hà
6TMH01Từ Mạnh Hóa
7TMH00Trần Minh Hồng
8TJD00Trần Dương
9THH00Trần Minh Hồng Hà
10NHB92Nhữ Thái Hải Hà
11NHBAZNgô Thị Hòa Biền
12NHB00Nguyễn Hòa Bình
13LTF00Lê Công Thành Đạt

Chỉ cần các bạn nhìn vô 4 mã được tô đậm thì ta nghiệm ra được qui luật tạo mã.Ở đây sẽ có vài trường hợp diễn ra:
(1) Danh sách đã có mã, muốn chuyển sang hệ mã như trên;
(2) Đã có DS theo hệ mã này & bổ sung người mới 'đến'
. . . . .

Rất vui lòng giải đáp các câu hỏi của các bạn, nếu có!

Thân chào & chúc các bạn luôn khỏe!
 
Top Bottom