Tách số trong chuỗi

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

Noname2023

Thành viên mới
Tham gia
23/2/23
Bài viết
5
Được thích
2
Xin chào ACE trong diễn đàn! xin cho hỏi cách rút trích các ký số trong chuỗi sau, xin cám ơn!:
C12HD​
A123KHD​
S45F​
 
liên tiếp như mẫu đó ah. Trong vd này thì là 12, 123, 45
Để làm bài toán này, tôi đề xuất 2 bước với chuỗi gốc nằm ở ô A2:
- Bước 1: Ô B2, đặt công thức tìm vị trí đầu tiên trong chuỗi là ký tự số
Mã:
=AGGREGATE(15,6,FIND(ROW($A$1:$A$10)-1,A2),1)
- Bước 2: Ô C2, đặt công thức để tách số (cắt chuỗi từ vị trí đầu tiên là số, sau đó lấy giá trị số lớn nhất)
Mã:
=LOOKUP(10^10,--MID(A2,B2,ROW($A$1:$A$20)))

Công thức gộp:
Mã:
=LOOKUP(10^10,--MID(A2,AGGREGATE(15,6,FIND(ROW($A$1:$A$10)-1,A2),1),ROW($A$1:$A$20)))
 
Xin chào ACE trong diễn đàn! xin cho hỏi cách rút trích các ký số trong chuỗi sau, xin cám ơn!:
C12HD​
A123KHD​
S45F​
. . . . . .
Mã:
=AGGREGATE(14,6,MID(A2,ROW($1:$255),TRANSPOSE(ROW($1:$255)))+0,1)
Nếu muốn lấy cả số 0 ở đầu số
Mã:
=MID(A2,MIN(FIND(ROW($1:$10)-1,A2&1/17)),COUNT(0+MID(A2,ROW($1:$255),1)))
 
Lần chỉnh sửa cuối:
Xin cám ơn các bạn đã nhiệt tình giúp đỡ, mình sẽ nghiên cứu
 
Nếu office 2016 thì có thể làm như sau
=concat(if(isnumber(--mid(a1,row(indirect("a1:a"&len(a1))),1),mid(a1,row(indirect("a1:a"&len(a1))),""))
Chuỗi của bạn chỉ có các ký tự số liên tiếp hay có thể không liên tiếp?
Thử lại hộ nhé, tại mình đang gõ bằng điện thoại nên có thể sai sót.
 
Ah Quên nữa nhân tiện các bạn cho hỏi các lọc thứ dựa trên ngày tháng, Ví dụ: cột Ngày tháng: có các giá trị ngày , yêu cầu lọc những ngày thứ 7 hoặ chủ nhật thì làm sao ah. Cám ơn nhiều
 
Cai này bạn dùng Power query thì thực hiện dễ dàng
 
Xin chào ACE trong diễn đàn! xin cho hỏi cách rút trích các ký số trong chuỗi sau, xin cám ơn!:
C12HD​
A123KHD​
S45F​
Góp vui với hàm UDF (tác giả @NDU ). Đăng lên biết đâu có bạn nào cần dùng
Mở workbook lên. nhấn phím ALT và phím F11
Chọn insert/ chọn modul
paste code dưới vào modul

Mã:
Function ExtractChar(text As Variant, iType As String)
  Dim Tmp 'As String
  Tmp = Switch(iType = "L", "[^a-zA-Z]", iType = "N", "[^0-9]", iType = "S", "[0-9a-zA-Z]")
  With CreateObject("VBScript.RegExp")
    .Global = True: .Pattern = Tmp
    ExtractChar = .Replace(text, "")
  End With
End Function
Cách dùng:
1/ tách lấy số =@ExtractChar($ ô cần tách;"N") và Enter
2/ Tách lấy chữ: =@ExtractChar($ ô cần tách;"L") và Enter
3/ Tách lấy ký tự đặc biệt: =@ExtractChar($ ô cần tách;"S") và Enter
 
Mã:
Function ExtractChar(text As Variant, iType As String)
  Dim Tmp 'As String
  Tmp = Switch(iType = "L", "[^a-zA-Z]", iType = "N", "[^0-9]", iType = "S", "[0-9a-zA-Z]")
  With CreateObject("VBScript.RegExp")
    .Global = True: .Pattern = Tmp
    ExtractChar = .Replace(text, "")
  End With
End Function
Dùng cái hàm Switch này gọn he, thay thế cho mấy cái if hoặc select case. Chừ tôi mới biết đến hàm này đó.
 
Dùng cái hàm Switch này gọn he, thay thế cho mấy cái if hoặc select case. Chừ tôi mới biết đến hàm này đó.
Hàm này của anh Ndu viết lâu rồi, tôi nhớ và tìm may sao vẫn còn lưu được. Nhìn chung là tôi không hiểu gì cả nhưng thấy dùng cũng dễ và hữu dụng nên đăng lại lên biết đâu có ai cần dùng.
 
Hàm này của anh Ndu viết lâu rồi, tôi nhớ và tìm may sao vẫn còn lưu được. Nhìn chung là tôi không hiểu gì cả nhưng thấy dùng cũng dễ và hữu dụng nên đăng lại lên biết đâu có ai cần dùng.
Ý tôi là chỉ cái hàm Switch ấy mà. Thay vì:
Rich (BB code):
If iType = "L" Then
   Tmp = "[^a-zA-Z]"
elseIf iType = "N" Then
   Tmp ="[^0-9]"
elseIf iType = "S" Then
   Tmp ="[0-9a-zA-Z]"
End If

Thì dùng Switch(iType = "L", "[^a-zA-Z]", iType = "N", "[^0-9]", iType = "S", "[0-9a-zA-Z]")
 
Web KT
Back
Top Bottom