Tách dữ liệu từ chuỗi text

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

nkthang

Thành viên mới
Tham gia
6/1/17
Bài viết
10
Được thích
1
Anh chị giúp em với ạ,

em có các dòng dữ liệu:

1. 0708581234 01 10347133 unable to contact => cần lấy giá trị 10347133
2. 10347129 01 0966205678 Confirmed => cần lấy giá trị 10347129
3. unable to contact 07085845678 01 10347138 => cần lấy giá trị 10347138

Anh Chị vui lòng hướng dẫn giúp em hàm để lấy ra chuỗi 8 số, luôn bắt đầu bằng 103xxxxx. Vị trí có thể bất kỳ: khi ở đầu, khi ở giữa, khi ở cuối như trên với ạ,
 
Lần chỉnh sửa cuối:
Bạn dùng công thức này
=MID(A2,IFERROR(FIND(" 103",A2)+1,1),8)
 
Anh chị giúp em với ạ,

em có các dòng dữ liệu:

1. 0708581234 01 10347133 unable to contact => cần lấy giá trị 10347133
2. 10347129 01 0966205678 Confirmed => cần lấy giá trị 10347129
3. unable to contact 07085845678 01 10347138 => cần lấy giá trị 10347129 10347138

Anh Chị vui lòng hướng dẫn giúp em hàm để lấy ra chuỗi 8 số, luôn bắt đầu bằng 103xxxxx. Vị trí có thể bất kỳ: khi ở đầu, khi ở giữa, khi ở cuối như trên với ạ,
Giả sử ô dữ liệu là A1,.
B1 =MID(A1,SEARCH("103",A1),8)
Sau đó kéo xuống đến dòng cuối.
1721898486331.png
Bài đã được tự động gộp:

Anh nhanh tay quá. .
 
Bạn dùng công thức này
=MID(A2,IFERROR(FIND(" 103",A2)+1,1),8)
dạ cảm ơn anh nhiều ạ,
Bài đã được tự động gộp:

em cảm ơn a,
Bài đã được tự động gộp:

Giả sử ô dữ liệu là A1,.
B1 =MID(A1,SEARCH("103",A1),8)
Sau đó kéo xuống đến dòng cuối.
View attachment 302652
Bài đã được tự động gộp:


Anh nhanh tay quá. .
dạ cảm ơn a,
 
1721989137681.png
Chắc bạn cũng xong rồi, nhưng xin góp thêm 1 cách khác. =FILTERXML("<t><s>"&SUBSTITUTE(A1:A3, " ", "</s><s>")&"</s></t>", "(//s[starts-with(.,103)])")
 
Tôi nghĩ là quý vị sót hết rồi. Kể cả bài #3 là khá đầy đủ nhưng vẫn sót.
8 ký tự phải là một số. Tức là phải thử, nếu không đạt thì dò tiếp. Và cái dò tiếp này sẽ đưa về một hàm khủng. (ngay cả đệ quy bằng Lamda cũng khủng)
 
Tôi nghĩ là quý vị sót hết rồi. Kể cả bài #3 là khá đầy đủ nhưng vẫn sót.
8 ký tự phải là một số. Tức là phải thử, nếu không đạt thì dò tiếp. Và cái dò tiếp này sẽ đưa về một hàm khủng. (ngay cả đệ quy bằng Lamda cũng khủng)
Nếu cái số có 8 chữ số, bắt đầu bằng 103 là duy nhất trong chuỗi, em nghĩ là bài của #3 chỉ cần sửa 1 chút.
MID(" "&A1&" ",SEARCH(" 103????? "," "&A1&" ")+1,8)
 
Tôi nghĩ là quý vị sót hết rồi. Kể cả bài #3 là khá đầy đủ nhưng vẫn sót.
8 ký tự phải là một số. Tức là phải thử, nếu không đạt thì dò tiếp. Và cái dò tiếp này sẽ đưa về một hàm khủng. (ngay cả đệ quy bằng Lamda cũng khủng)
Nhận xét của anh rất thú vị!
Ý anh là nếu dữ liệu như vầy phải không?

1/ 0708581234 01 103A7133 10323789 unable to contact
2/ 103adsfg 110356789 10347129 01 0966205678 Confirmed
3/ unable to contact 1034567g 07085845678 01 10347138

Dùng hàm "khủng" như anh nêu thì nó như vầy:
Mã:
=MID(A1,LOOKUP(500,ROW($1:$500)/(FIND(103,MID(A1,ROW($1:$500),8))=1)/(FREQUENCY(-ROW($1:$500),ISERR(--MID("|"&A1,ROW($1:$500),1))*-ROW($1:$500))=9)),8)
Hễ nó thấy dãy 8 ký tự toàn số, không có 'abc...', và số 103 ở đầu dãy thì nó lấy ra.

Chúc anh cuối tuần vui khỏe.
/-*+//-*+//-*+/
 

File đính kèm

  • GPE_Tachso.xlsx
    9.6 KB · Đọc: 17
Lần chỉnh sửa cuối:
Thử phát, không biết có sai trường hợp nào nữa không?
Mã:
=AGGREGATE(14,6,--MID(A1,SEARCH(" "&"103????? "," "&A1&" ",ROW($1:$255)),8),1)
 
trường hợp nào nữa không?
Công thức tốt.
Chỉ nêu thêm cho vui, theo ý phải kiểm tra từng con số của anh @VetMini

Vd: trường hợp
0708581234 01 103,678. 103A7133 unable to contact
Hoặc
0708581234 01 103.0000 103A7133 unable to contact
Hoặc
0708581234 01 103:00:0 103A7133 unable to contact

Thân
 
Lần chỉnh sửa cuối:
Nhận xét của anh rất thú vị!
Ý anh là nếu dữ liệu như vầy phải không?

1/ 0708581234 01 103A7133 10323789 unable to contact
2/ 103adsfg 110356789 10347129 01 0966205678 Confirmed
3/ unable to contact 1034567g 07085845678 01 10347138

Dùng hàm "khủng" như anh nêu thì nó như vầy:
Mã:
=MID(A1,LOOKUP(500,ROW($1:$500)/(FIND(103,MID(A1,ROW($1:$500),8))=1)/(FREQUENCY(-ROW($1:$500),ISERR(--MID("|"&A1,ROW($1:$500),1))*-ROW($1:$500))=9)),8)
Hễ nó thấy dãy 8 ký tự toàn số, không có 'abc...', và số 103 ở đầu dãy thì nó lấy ra.

Chúc anh cuối tuần vui khỏe.
/-*+//-*+//-*+/

Em chào bác

Bác Hiệp ơi em thấy cách này em làm cho ra kết quả đúng ạ

B2=MID(A1,AGGREGATE(14,6,SEARCH(" 103?????*",A1,ROW($1:$100)),1),9)

Có gì bác góp ý giúp em để em được học hỏi thêm ạ, không hiểu cách của em có bị sai trong trường hợp nào nữa không ạ.

Em cảm ơn bác rất nhiều.

Trân trọng
 
Em chào bác

Bác Hiệp ơi em thấy cách này em làm cho ra kết quả đúng ạ

B2=MID(A1,AGGREGATE(14,6,SEARCH(" 103?????*",A1,ROW($1:$100)),1),9)

Có gì bác góp ý giúp em để em được học hỏi thêm ạ, không hiểu cách của em có bị sai trong trường hợp nào nữa không ạ.

Em cảm ơn bác rất nhiều.

Trân trọng
Xem bài #12.
Đưa những Vd trong bài vào làm thử và xem kết quả.

Thân
 
Công thức tốt.
Chỉ nêu thêm cho vui, theo ý phải kiểm tra từng con số của anh @VetMini

Vd: trường hợp
0708581234 01 103,678. 103A7133 unable to contact
Hoặc
0708581234 01 103.0000 103A7133 unable to contact
Hoặc
0708581234 01 103:00:0 103A7133 unable to contact

Thân
Mấy trường hợp ở trên này đều không thỏa điều kiện phải không bác?
Em góp vui:
Mã:
=AGGREGATE(15;6;--TEXT(--MID(SUBSTITUTE(A1;" ";REPT(" ";100));ROW($A$1:$A$10)*100-99;100);"[>10399999] ;[<10300000] ;0");1)
 
Mấy trường hợp ở trên này đều không thỏa điều kiện phải không bác?
Em góp vui:
Mã:
=AGGREGATE(15;6;--TEXT(--MID(SUBSTITUTE(A1;" ";REPT(" ";100));ROW($A$1:$A$10)*100-99;100);"[>10399999] ;[<10300000] ;0");1)
Còn sót:
103adsfg 103e5 01 0966205678 Confirmed 103:00:0

Thân
 
Nếu bài này dùng E365 hoặc PQ chắc dễ hơn, góp vúi thêm cách E2010 và E365
Mã:
=MID("#"&A2&"#",AGGREGATE(15,6,FIND(103,"#"&A2&"#",ROW($1:$255))/(MMULT(N(ISNUMBER(--MID("#"&A2&"#",TRANSPOSE(ROW($1:$10)-1)+ROW($1:$255),1))),{9;1;1;1;1;1;1;1;1;9})=8),1),8)
=LET(t,TEXTSPLIT(CONCAT(TEXT(MID(A2,ROW($1:$255),1),"0;\0;0; ")),," "),FILTER(t,(LEFT(t,3)="103")*(LEN(t)=8)))
1722224016751.png
 
Nếu bài này dùng E365 hoặc PQ chắc dễ hơn, góp vúi thêm cách E2010 và E365
Mã:
=MID("#"&A2&"#",AGGREGATE(15,6,FIND(103,"#"&A2&"#",ROW($1:$255))/(MMULT(N(ISNUMBER(--MID("#"&A2&"#",TRANSPOSE(ROW($1:$10)-1)+ROW($1:$255),1))),{9;1;1;1;1;1;1;1;1;9})=8),1),8)
=LET(t,TEXTSPLIT(CONCAT(TEXT(MID(A2,ROW($1:$255),1),"0;\0;0; ")),," "),FILTER(t,(LEFT(t,3)="103")*(LEN(t)=8)))
View attachment 302752
Công thức của em có kiểm tra từng con số trong dãy ký tự 8 số là đúng ý của anh @VetMini.

Em càng ngày càng giỏi hẳn!
/-*+//-*+//-*+/
 
FIND(103,"#"&A2&"#",ROW($1:$255))
Anh đã kiểm tra lại thấy công thức của cả hai anh em còn thiếu sót, như trường hợp dữ liệu sau:

"unable to contact 10,365,678.121 07085845678 01z10387868v 10399999"

Kết quả không chính xác, vì nó chưa kiểm tra 8 ký tự toàn số phải có khoảng trắng ở đầu và cuối.

Điều chỉnh lại như sau:
Mã:
=MID(A1,LOOKUP(500,TEXT(SEARCH(" 103????? "," "&A1&" ",ROW($1:$500)),"[="&ROW($1:$500)&"]0;")/(FREQUENCY(-ROW($1:$500),ISERR(--MID("|"&A1,ROW($1:$500),1))*-ROW($1:$500))=9)),8)
/-*+//-*+//-*+/
 

File đính kèm

  • GPE_Tachso.xlsx
    10.5 KB · Đọc: 5
Web KT

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

Back
Top Bottom