Tách dữ liệu từ chuỗi text (1 người xem)

  • Thread starter Thread starter nkthang
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

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

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

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.
Công thức trên em đang viết chung cho quy tắc là 8 ký từ số liên tiếp và 3 số đầu là 103, nằm giữa các ký tự không phải số nên nó lấy số đầu tiên đó anh.
 
Còn sót:
103adsfg 103e5 01 0966205678 Confirmed 103:00:0

Thân
Thêm điều kiện len=8 nữa anh.
Mã:
=AGGREGATE(15;6;--TEXT(MID(SUBSTITUTE(A1;" ";REPT(" ";100));ROW($A$1:$A$10)*100-99;100)/(LEN(TRIM(MID(SUBSTITUTE(A1;" ";REPT(" ";100));ROW($A$1:$A$10)*100-99;100)))=8);"[<10300000] ;0");1)
 
Thêm điều kiện len=8 nữa anh.
Mã:
=AGGREGATE(15;6;--TEXT(MID(SUBSTITUTE(A1;" ";REPT(" ";100));ROW($A$1:$A$10)*100-99;100)/(LEN(TRIM(MID(SUBSTITUTE(A1;" ";REPT(" ";100));ROW($A$1:$A$10)*100-99;100)))=8);"[<10300000] ;0");1)
Khà khà..

- Chữ "e" nằm bất kể vị trí, vd: 103456e2
- Sao bỏ biên trên 10399999 rồi! Lỡ vầy "103adsfg 103e5 01 96620567 103:00:0 Confirmed 103:00:0 1 10,345,678" thì sao

/-*+//-*+//-*+/
 
Quay lại chủ đề chút chứ không bị xóa hết. :D
Không có đồ xịn đành chế cháo lại đồ cổ xài tạm.
Mã:
=AGGREGATE(15;6;--TEXT(--MID(SUBSTITUTE(A1;" ";"e0"&REPT(" ";98));ROW($A$1:$A$10)*100-99;100);"[>=104e5] ;[<103e5] ;0");1)
 
Quay lại chủ đề chút chứ không bị xóa hết. :D
Không có đồ xịn đành chế cháo lại đồ cổ xài tạm.
Mã:
=AGGREGATE(15;6;--TEXT(--MID(SUBSTITUTE(A1;" ";"e0"&REPT(" ";98));ROW($A$1:$A$10)*100-99;100);"[>=104e5] ;[<103e5] ;0");1)
Không bị "e" nhưng bị vướng dấu phân cách: phẩy và chấm
'unable to contact 10,365,678.121 07085845678 01z10387868v 10399999'

/-*+//-*+//-*+/
 
Không bị "e" nhưng bị vướng dấu phân cách: phẩy và chấm
'unable to contact 10,365,678.121 07085845678 01z10387868v 10399999'

/-*+//-*+//-*+/
Vậy thì chơi luật rừng, thằng nào ngáng đường xử hết.
Mã:
=AGGREGATE(15;6;--TEXT(--MID(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1;".";"_");",";"_");"e";"_");" ";REPT(" ";100));ROW($A$1:$A$10)*100-99;100);"[>104e5] ;[<103e5] ;0");1)
 
Hi vọng không sai gì nữa bác ạ
Mã:
=AGGREGATE(15,6,--TEXT(MID(A1,FIND(103,A1,ROW($1:$90)),8)/FIND(" "&--MID(A1,FIND(103,A1,ROW($1:$90)),8)&" "," "&A1&" ")^0,"[>=10300000]0;;;"),1)
 

File đính kèm

Vậy thì chơi luật rừng, thằng nào ngáng đường xử hết.
Mã:
=AGGREGATE(15;6;--TEXT(--MID(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1;".";"_");",";"_");"e";"_");" ";REPT(" ";100));ROW($A$1:$A$10)*100-99;100);"[>104e5] ;[<103e5] ;0");1)
Đúng "ý" anh @VetMini rồi!
:clap::clap::clap:

Anh em mình lôi 1 đống "khủng long" cho ảnh cười khoái trá!

Khà khà khà
/-*+//-*+//-*+/
 
Đúng "ý" anh @VetMini rồi!
:clap::clap::clap:

Anh em mình lôi 1 đống "khủng long" cho ảnh cười khoái trá!

Khà khà khà
/-*+//-*+//-*+/
Tôi chỉ thấy trình độ công thức của các bạn đã quá cao. Đây là lúc các bạn cần làm quen với cái nhìn "từ trên xuống". Nhìn được giới hạn tầm vực của yêu cầu.

Chú thích:
"khủng long", theo tinh thần Jurassic Park thì chúng chỉ có một vài nguồn gen lấy ra từ muỗi mòng bị kẹt trong nhựa thông. Xài một thời gian không khéo sẽ bị trùng máu.
365 với tư duy "mảng động", là một nguồn gen mới - có thể cũng từ nhựa thông, có thể thứ khác mà ta chưa biết tới.
Nguồn gen mới nữa là MS tự biết mình, bắt chước theo đường lối Google là cái gì tính mà cần cổ máy nặng quá thì chỉ làm trên phiên bản mạng (lúc đó có thể Excel sẽ tính bằng sức của máy chủ MS). Nếu thấy nó hiệu quả thì họ có thể sẽ tìm cách xải tiến bọ máy Regexp của VBScript (tức là Script Engine). Điển hình của việc này là ba hàm RegexExtract, RegexReplace, và RegexTest (ba cái giao diện chính của VBScript) mà ta thấy được trong phiên bản bêta 365.

Nguồn nữa, khá cần thiết trong tương lai nhưng hiện tại thì các bạn chưa có ý muốn tiến tới. Là hàm Lamda. Hàm này tôi chỉ thấy các bạn dùng cới các hàm tay chân (helpers) của nó chứ chưa thấy dùng thẳng. Phải dùng thẳng mới hiểu rõ từ Lambda trong lĩnh vực IT.
 
Tôi chỉ thấy trình độ công thức của các bạn đã quá cao. Đây là lúc các bạn cần làm quen với cái nhìn "từ trên xuống". Nhìn được giới hạn tầm vực của yêu cầu.

Chú thích:
"khủng long", theo tinh thần Jurassic Park thì chúng chỉ có một vài nguồn gen lấy ra từ muỗi mòng bị kẹt trong nhựa thông. Xài một thời gian không khéo sẽ bị trùng máu.
365 với tư duy "mảng động", là một nguồn gen mới - có thể cũng từ nhựa thông, có thể thứ khác mà ta chưa biết tới.
Nguồn gen mới nữa là MS tự biết mình, bắt chước theo đường lối Google là cái gì tính mà cần cổ máy nặng quá thì chỉ làm trên phiên bản mạng (lúc đó có thể Excel sẽ tính bằng sức của máy chủ MS). Nếu thấy nó hiệu quả thì họ có thể sẽ tìm cách xải tiến bọ máy Regexp của VBScript (tức là Script Engine). Điển hình của việc này là ba hàm RegexExtract, RegexReplace, và RegexTest (ba cái giao diện chính của VBScript) mà ta thấy được trong phiên bản bêta 365.

Nguồn nữa, khá cần thiết trong tương lai nhưng hiện tại thì các bạn chưa có ý muốn tiến tới. Là hàm Lamda. Hàm này tôi chỉ thấy các bạn dùng cới các hàm tay chân (helpers) của nó chứ chưa thấy dùng thẳng. Phải dùng thẳng mới hiểu rõ từ Lambda trong lĩnh vực IT.
Em vẫn đang học theo cách làm hồi quy bằng lambda, như cách của bác và bác Hiệp trước có làm trong 1 bài, mà vẫn chưa thông được.
Mảng thì em tưởng tượng được trong đầu, mà cái hồi quy này khó quá.
 
Em vẫn đang học theo cách làm hồi quy bằng lambda, như cách của bác và bác Hiệp trước có làm trong 1 bài, mà vẫn chưa thông được.
Mảng thì em tưởng tượng được trong đầu, mà cái hồi quy này khó quá.
Bắt buộc phải đường đi phải viết ra giấy chứ đệ quy mà tính trong đầu tôi cũng không làm nổi.
Nhưng đệ quy chỉ là 1 lý do để Lambda thôi. Còn vài lý do khác.
 
Bắt buộc phải đường đi phải viết ra giấy chứ đệ quy mà tính trong đầu tôi cũng không làm nổi.
Nhưng đệ quy chỉ là 1 lý do để Lambda thôi. Còn vài lý do khác.
Dạ, mong bác chia sẻ ạ. Em tìm hiểu vì sở thích, nên mấy cái này hứng thú lắm.
 
Dạ, mong bác chia sẻ ạ. Em tìm hiểu vì sở thích, nên mấy cái này hứng thú lắm.
Thì cứ viết ra giấy thử xem. Trên nguyên tắc, đệ quy dùng để thay thế các đoạn code cần vòng lặp cho các ngôn ngữ không có lòng lặp.
Đặt là hàm TIMCHUOI với tham số: (i) chuỗi cần lọc
1. Nếu len chuỗi cần lọc < 8 thì trả về ""
2. Nếu không thì nhét một dấu " " vào trước nó.
3. Kế đó là tìm chuỗi " 103" trong left chuỗi -9
3. Nếu không có kết quả thì
3. Tìm xem thằng thứ chín sau chỗ có phải là trống hoặc không có thằng thứ chín
3.1. Nếu 5 thằng kế là số thì đã tìm ra, trải chuốt và trả về kết quả.
3.2. Chưa tìm được, chạy tiếp
4. Gọi TIMCHUOI(chuỗi kể từ chỗ đã tìm kia + 4)

Nếu dùng 2 hàm thì dễ hơn một chút:
Hàm TIMCHUOI gọi hàm TIMCHUOI2 hàm thứ nhất dọn data thành mảng, hàm thứ hai duyệt mảng theo đường lối đệ quy. Tức là xét phần tử đầu, nếu đạt thì trả về kết quả, nếu không thì gọi đệ quy với mảng đã bỏ đi phần tử đầu.
TIMCHUOI(du lieu):
trả về TIMCHUOI2(TextSplit(TRIM(du lieu), " "))

TIMCHUOI2(duLieu)
IF duLieu(1) thỏa return duLieu đã chải chuốt lại
ELSE TIMCHUOI2(DROP(duLieu, 1))
 
Thì cứ viết ra giấy thử xem. Trên nguyên tắc, đệ quy dùng để thay thế các đoạn code cần vòng lặp cho các ngôn ngữ không có lòng lặp.
Đặt là hàm TIMCHUOI với tham số: (i) chuỗi cần lọc
1. Nếu len chuỗi cần lọc < 8 thì trả về ""
2. Nếu không thì nhét một dấu " " vào trước nó.
3. Kế đó là tìm chuỗi " 103" trong left chuỗi -9
3. Nếu không có kết quả thì
3. Tìm xem thằng thứ chín sau chỗ có phải là trống hoặc không có thằng thứ chín
3.1. Nếu 5 thằng kế là số thì đã tìm ra, trải chuốt và trả về kết quả.
3.2. Chưa tìm được, chạy tiếp
4. Gọi TIMCHUOI(chuỗi kể từ chỗ đã tìm kia + 4)

Nếu dùng 2 hàm thì dễ hơn một chút:
Hàm TIMCHUOI gọi hàm TIMCHUOI2 hàm thứ nhất dọn data thành mảng, hàm thứ hai duyệt mảng theo đường lối đệ quy. Tức là xét phần tử đầu, nếu đạt thì trả về kết quả, nếu không thì gọi đệ quy với mảng đã bỏ đi phần tử đầu.
TIMCHUOI(du lieu):
trả về TIMCHUOI2(TextSplit(TRIM(du lieu), " "))

TIMCHUOI2(duLieu)
IF duLieu(1) thỏa return duLieu đã chải chuốt lại
ELSE TIMCHUOI2(DROP(duLieu, 1))
Em trả bài bác.
Em làm theo cách 2 thôi. Cách 1 vẫn chưa làm được.
Mã:
=LET(a,TEXTSPLIT(A1," "),dk,LAMBDA(x,IFERROR(AND(LEN(x)=8,EXACT(--x,x),--x>=10300000,--x<10400000),0)),timchuoi,LAMBDA(f,x,y,IF(dk(INDEX(x,y)),INDEX(x,y),f(f,x,y+1))),timchuoi(timchuoi,a,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 ạ,
1 nhát là xong, nhanh gọn lẹ. Các vị ở trên làm cái gì mà dài thế
=IFERROR(MID(A1, SEARCH("103", A1), 8), "")
Bài đã được tự động gộp:

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!
/-*+//-*+//-*+/
Trình độ giải thuật vẫn chưa thông minh. bài này chỉ 1 công thức là xong
=IFERROR(MID(A1, SEARCH("103", A1), 8), "")
 
Hay quá! quả là bộ óc đi trước người khác 10 năm

***&&%***&&%***&&%

1724336327928.png
 
Hay quá! quả là bộ óc đi trước người khác 10 năm

***&&%***&&%***&&%

View attachment 303350

Đã làm theo Đúng Yêu cầu của thớt . Không giải thích nhiều. Thuật toán của tôi Chính xác rồi

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àm theo Đúng Yêu cầu của thớt . Không giải thích nhiều. Thuật toán của tôi Chính xác rồi
...
Chịu khó đọc một chút thì đã biết nhu cầu của thớt đã giải quyết xong từ bài #5, và thớt đã viết bài #6 để xác nhận như vậy.

Tất cả các bài sau đó đều là do chúng tôi muốn tập dợt viết hàm giải các trường hợp "nếu..."

Tự dưng có kẻ xớn xác, a thần phù tự cho là "làm cái gì mà dài thế"
Theo nguyên tắc học hỏi. Bài toán mở rộng thì càng dài càng tốt.
1 nhát là xong, nhanh gọn lẹ. Các vị ở trên làm cái gì mà dài thế
=IFERROR(MID(A1, SEARCH("103", A1), 8), "")
...
Trình độ giải thuật vẫn chưa thông minh. bài này chỉ 1 công thức là xong
=IFERROR(MID(A1, SEARCH("103", A1), 8), "")
1 nhát chém vào thân chuối đã có người đốn sẵn -.,\;
 
Chịu khó đọc một chút thì đã biết nhu cầu của thớt đã giải quyết xong từ bài #5, và thớt đã viết bài #6 để xác nhận như vậy.

Tất cả các bài sau đó đều là do chúng tôi muốn tập dợt viết hàm giải các trường hợp "nếu..."

Tự dưng có kẻ xớn xác, a thần phù tự cho là "làm cái gì mà dài thế"
Theo nguyên tắc học hỏi. Bài toán mở rộng thì càng dài càng tốt.

1 nhát chém vào thân chuối đã có người đốn sẵn -.,\;
GÓP VUI HÀM VBA
Mã:
Function ExtractNumber(inputString As String) As String
Dim mf5d36a3e36c77e959b37a798f6a85baa As Object
Dim cd4db14c276a96794e3dbeab7ab1755ab As Object
Dim wf685b050211a9ec00fbc744b9dd79df0 As String
wf685b050211a9ec00fbc744b9dd79df0 = "103\d{5}"
Set cd4db14c276a96794e3dbeab7ab1755ab = CreateObject("VBScript.RegExp")
cd4db14c276a96794e3dbeab7ab1755ab.Global = True
cd4db14c276a96794e3dbeab7ab1755ab.IgnoreCase = True
cd4db14c276a96794e3dbeab7ab1755ab.pattern = wf685b050211a9ec00fbc744b9dd79df0
If cd4db14c276a96794e3dbeab7ab1755ab.Test(inputString) Then
Set mf5d36a3e36c77e959b37a798f6a85baa = cd4db14c276a96794e3dbeab7ab1755ab.Execute(inputString)
ExtractNumber = mf5d36a3e36c77e959b37a798f6a85baa(0).Value
Else
ExtractNumber = ""
End If
End Function

=ExtractNumber(A1)
 

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

Back
Top Bottom