Các phương pháp tách số từ chuỗi và ngược lại, đề nghị post tại đây

Liên hệ QC
chào các bạn,Mình có 1 vấn đề muốn hỏi.mình có Kí tự thế này 10A-2-2.MÌNH MUỐN BỎ DẤU - ĐẦU TIÊN ĐỂ LIỀN VỚI CHỮ A,VÀ DẤU - SAU THÌ CHUYỂN THÀNH DẤU CHẤM.KÍ TỰ MÌNH MUỐN CÓ SẼ LÀ 10A2.2
 
chào các bạn,Mình có 1 vấn đề muốn hỏi.mình có Kí tự thế này 10A-2-2.MÌNH MUỐN BỎ DẤU - ĐẦU TIÊN ĐỂ LIỀN VỚI CHỮ A,VÀ DẤU - SAU THÌ CHUYỂN THÀNH DẤU CHẤM.KÍ TỰ MÌNH MUỐN CÓ SẼ LÀ 10A2.2
Ý bạn muốn thành thế này?
PHP:
=SUBSTITUTE(SUBSTITUTE(A1;"-";"";1);"-";".")
 

File đính kèm

  • 123.xlsx
    8.9 KB · Đọc: 18
Lần chỉnh sửa cuối:
Thì thêm 1 cái IF nữa thôi:
Mã:
=LOOKUP(10^14,1*RIGHT(IF(COUNTIF(B9,"*_*"),LEFT(TRIM(B9),LEN(TRIM(B9))-1-LEN(TRIM(RIGHT(SUBSTITUTE(TRIM(B9),"_",REPT(" ",255)),255)))),TRIM(B9)),ROW($1:$255)))

Thưa thày, nếu không có dấu hiệu có kí tự _ thì có giải pháp nào khác bài toán theo kiểu aaa123bb--->ra 123 mà không cần dùng đến hàm Isnumber không ah?
 

File đính kèm

  • Tach so.xlsx
    8.7 KB · Đọc: 15
  • 123.JPG
    123.JPG
    13.1 KB · Đọc: 6
Lần chỉnh sửa cuối:
Thưa thày, nếu không có dấu hiệu có kí tự _ thì có giải pháp nào khác bài toán theo kiểu aaa123bb mà không cần dùng đến hàm Isnumber không ah?

Dữ liệu kiểu này thì dễ:
Mã:
=MID(A2,LOOKUP(10,-MID(A2,ROW($1:$255),1),ROW($1:$255))-COUNT(-MID(A2,ROW($1:$255),1))+1,COUNT(-MID(A2,ROW($1:$255),1)))
Bấm Ctrl + Shift + Enter để kết thúc
 
bạn ơi cho mình hỏi nếu có trường hợp là 10A2-2-2 thì kí tự mình muốn là 10A2.2.2.bản có thể cho mình công thức tổng quát đúng cho cả 2 trường hợp mình hỏi ko???cảm ơn bạn nhiều
 
Dữ liệu kiểu này thì dễ:
Mã:
=MID(A2,LOOKUP(10,-MID(A2,ROW($1:$255),1),ROW($1:$255))-COUNT(-MID(A2,ROW($1:$255),1))+1,COUNT(-MID(A2,ROW($1:$255),1)))
Bấm Ctrl + Shift + Enter để kết thúc

Cảm ơn thày, 2 hôm nay qua một số bài theo dõi trên diễn đàn em đã học được cách sử dụng một số hàm

--------
Em vẫn biết VBA là nhanh nhất, công thức dữ liệu lớn sẽ chậm nhưng nếu không biết phần này, đọc những công thức phức tạp thấy chóng cả mặt...quả thấy rất khó chịu, bản thân cứ thấy như thiếu thiếu cái gì đó.
 
bạn ơi cho mình hỏi nếu có trường hợp là 10A2-2-2 thì kí tự mình muốn là 10A2.2.2.bản có thể cho mình công thức tổng quát đúng cho cả 2 trường hợp mình hỏi ko???cảm ơn bạn nhiều
 
bạn ơi cho mình hỏi nếu có trường hợp là 10A2-2-2 thì kí tự mình muốn là 10A2.2.2.bản có thể cho mình công thức tổng quát đúng cho cả 2 trường hợp mình hỏi ko???cảm ơn bạn nhiều

Thì bạn sửa thành thế này

PHP:
=IF(FIND("-";A2)=4;SUBSTITUTE(SUBSTITUTE(A2;"-";"";1);"-";".");SUBSTITUTE(A2;"-";".")&".")
 

File đính kèm

  • 123.xlsx
    8.9 KB · Đọc: 7
mình quên mất còn 1 trường hợp nữa là 1A2-2-2 mình muốn 1A2.2.2.mong bạn giúp đỡ
 
mình quên mất còn 1 trường hợp nữa là 1A2-2-2 mình muốn 1A2.2.2.mong bạn giúp đỡ
 
bạn có thể dùng hàm cho 4 trường hơp "1a-1-1","1a1-1-1","10a-1-1","10a1-1-1" thành cái mình muốn là "1a1.1","1a1.1.1","10a1.1","10a1.1.1" được ko??cảm ơn bạn nhiều
 
Thưa thày, nếu không có dấu hiệu có kí tự _ thì có giải pháp nào khác bài toán theo kiểu aaa123bb--->ra 123 mà không cần dùng đến hàm Isnumber không ah?

Dữ liệu kiểu này thì dễ:
Mã:
=MID(A2,LOOKUP(10,-MID(A2,ROW($1:$255),1),ROW($1:$255))-COUNT(-MID(A2,ROW($1:$255),1))+1,COUNT(-MID(A2,ROW($1:$255),1)))
Bấm Ctrl + Shift + Enter để kết thúc

Em tập dùng công thức sau không phải ấn Ctrl + Shift + Enter, nhưng chắc là dài, có gì mong mọi người góp ý dùm em

PHP:
=MID(A2;MIN(FIND({1;2;3;4;5;6;7;8;9};A2&123456789));LOOKUP(10^14;1*MID(A2;ROW(INDIRECT("1:255"));1);ROW(INDIRECT("1:255")))-MIN(FIND({1;2;3;4;5;6;7;8;9};A2&123456789)-1))

--------
Tại sao Min không cần Ctrl + Shift + Enter, trong khi Count lại cần nhỉ?
 

File đính kèm

  • Tach so.xlsx
    9 KB · Đọc: 13
Lần chỉnh sửa cuối:
Em tập dùng công thức sau không phải ấn Ctrl + Shift + Enter, nhưng chắc là dài, có gì mong mọi người góp ý dùm em

Mã:
=MID(A2;MIN(FIND({1;2;3;4;5;6;7;8;9};A2&123456789));LOOKUP([COLOR=#ff0000]10^14[/COLOR];1*MID(A2;ROW(INDIRECT("1:255"));1);ROW(INDIRECT("1:255")))-MIN(FIND({1;2;3;4;5;6;7;8;9};A2&123456789)-1))

LOOKUP(10...) là được rồi, cần gì phải đến mức LOOKUP(10^14... ) chứ
Ngoài ra: ROW(INDIRECT("1:255")) sao không ghi thành ROW($1:$255) cho gọn
 
Có thể ngắn hơn bằng cách này:
Mã:
=MID(A2,MIN(FIND({1,2,3,4,5,6,7,8,9},A2&123456789)),SUMPRODUCT((CODE(MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1))<=57)*1))
 
LOOKUP(10...) là được rồi, cần gì phải đến mức LOOKUP(10^14... ) chứ
Ngoài ra: ROW(INDIRECT("1:255")) sao không ghi thành ROW($1:$255) cho gọn

Híc, em máy móc quá nên dùng 10^14 trong khi nó chỉ có 1 số thì hiển nhiên nhỏ hơn 10 rồi, nhưng em băn khoăn chưa giải thích được cái vụ này

Tại sao Min không cần Ctrl + Shift + Enter, trong khi Count lại cần nhỉ?

Trong khi đối số của 2 hàm Min và Count đếu là mảng cả mà thày
 
Bạn thử liệt kê tất cả các ký tự, số có thể có vào 1 cột (ví dụ cột A, bắt đầu bằng A1 nhé) rồi dùng công thức sau = Code(A1), và copy cho các ô còn lại, bạn sẽ thấy số lý do của số 57 ở đây, hihi
 
Web KT
Back
Top Bottom