Tách chuỗi

Liên hệ QC

feelingyes

Thành viên tiêu biểu
Tham gia
24/9/07
Bài viết
459
Được thích
395
Nghề nghiệp
Economic
Ví dụ trong một cell em có tên " Vũ Văn Sang". Có cách nào để em lấy được tên Sang ở trong đó Sang cell bên cạnh không?
Các anh chị cao thủ xem file và chỉ dạy
Xin cám ơn
 

File đính kèm

  • Conditional Formating-Birthday.xls
    20 KB · Đọc: 488
Vụ tách tên đã có nói nhiều.. bạn search tìm sẽ thấy... Tôi chỉ trã lời bạn 2 câu còn lại:
1> Công thức tại Cell F2
Mã:
=SUMPRODUCT((DAY($C2:$C6)=DAY($F$1))*(MONTH($C2:$C6)=MONTH($F$1)))
2> Conditional Formating: Quét chọn từ C2 đến cuối, gõ công thức vào CF:
Mã:
=AND(DAY($C2)=DAY($F$1),MONTH($C2)=MONTH($F$1))
ANH TUẤN
 
Trong công thức này có một số em không hiểu, rất mong được những đàn anh đi trước chỉ dạy
=IF(ISERROR(FIND(" ",TRIM(A2),1)),"",RIGHT(TRIM(A2),LEN(TRIM(A2)) -FIND("#",SUBSTITUTE(TRIM(A2)," ","#",LEN(TRIM(A2))-LEN(SUBSTITUTE(TRIM(A2)," ",""))))))
---> đặc biệt là ký tự "#" có ý nghĩa đại diện như thế nào ạ?
 
feelingyes đã viết:
Trong công thức này có một số em không hiểu, rất mong được những đàn anh đi trước chỉ dạy
=IF(ISERROR(FIND(" ",TRIM(A2),1)),"",RIGHT(TRIM(A2),LEN(TRIM(A2)) -FIND("#",SUBSTITUTE(TRIM(A2)," ","#",LEN(TRIM(A2))-LEN(SUBSTITUTE(TRIM(A2)," ",""))))))
---> đặc biệt là ký tự "#" có ý nghĩa đại diện như thế nào ạ?

1. Trước tiên CT này kiểm tra xem chuỗi A2 có chứa khoảng trắng " " không nếu không có thì trả về rỗng ""
2. Nếu có chứa khoảng trắng thì dùng hàm Right cắt chuỗi A2 từ bên phải với độ dài được tính ra từ cụm:
LEN(TRIM(A2))-FIND("#",SUBSTITUTE(TRIM(A2)," ","#",LEN(TRIM(A2))-LEN(SUBSTITUTE(TRIM(A2)," ",""))))

3. Phần đầu của cụm trên tính độ dài của chuỗi A2 (đã loại bớt các khoảng trắng dư thừa)
4. Phần sau quan trọng đây:
FIND("#",SUBSTITUTE(TRIM(A2)," ","#",LEN(TRIM(A2))-LEN(SUBSTITUTE(TRIM(A2)," ",""))))

5. Tìm vị trí ký tự # trong chuỗi là kết quả trả về của cụm
SUBSTITUTE(TRIM(A2)," ","#",LEN(TRIM(A2))-LEN(SUBSTITUTE(TRIM(A2)," ","")))

6. Cụm CT trên sẽ tìm các khoảng trắng trong chuỗi A2 và thay vào bằng ký tự "#" và bắt đầu thay tại instance thứ LEN(TRIM(A2))-LEN(SUBSTITUTE(TRIM(A2)," ","")) là kết quả trả về của cụm CT này

7. Cụm CT này LEN(TRIM(A2))-LEN(SUBSTITUTE(TRIM(A2)," ","")) lấy chiều dài của chuỗi A2 trừ cho chiều dài đã loại bỏ tất cả khoảng trắng --> số instance cần thay "#" vào.

8. Từ đó CT sẽ xác định được vị trí cần tìm tại bước 4 (hàm Find), và từ đó dùng hàm Right tại bước 2 cắt ra chuỗi cần thiết


Hy vọng bạn hiểu, có thắc mắc gì thì hỏi lại
TP
 
Có 1 cách khác đễ cắt tên!
Bước 1: Lấy vị trị khoảng trắng cuối cùng:
Mã:
DAI =ROW(INDIRECT("1:"&LEN(TRIM($A2))))
Mã:
VT =MAX((MID(TRIM($A2),DAI,1)=" ")*DAI)
Bước 2: Tách tên:
Mã:
 =TRIM(RIGHT(TRIM($A2),LEN(TRIM($A2))-VT))
ANH TUẤN
 
Lần chỉnh sửa cuối:
Tôi nghĩ thuật toán nhanh nhất đễ tách tên (cho cã VBA và công thức) là quét ký tự ngược từ cuối lên đầu.. đến khi gặp khoảng trắng thì dùng lại, xác định vị trí rồi dùng hàm xử lý chuổi đễ tách:
Quy trình như sau:
1> Cắt các ký tự trắng bị thừa
Mã:
TU=TRIM($A1)
2>Quét ngược từ cuối lên đầu:
Mã:
KT =MID(TU,LEN(TU)+1-ROW($1:$100),1)
3> Đặt điều kiện đễ lấy vị trị thứ i nếu quá trình quét gặp phải khoảng trắng
Mã:
VT =MATCH(TRUE,KT=" ",0)
Cuối cùng là công thức:
Mã:
=RIGHT(TU,VT-1)
Đây là tôi chia ra từng công đoạn cho các bạn tiện theo dỏi.. còn như làm thực sự thì ta có thể rút gọn hơn với 1 name duy nhất
Mã:
VT =MATCH(TRUE,MID(TRIM($A1),LEN(TRIM($A1))-ROW($1:$100),1)=" ",0)
Và công thức:
Mã:
=RIGHT(TRIM($A1),VT)
Công thức này còn 1 lổi nữa, đó là nếu họ và tên nhập vào chỉ có 1 từ duy nhất thì sẽ bị #NA... Các bạn tự tìm hiểu nhé... Tất nhiên bùn lắm thì ta sẽ ISNA, nhưng như thế thì.. chẳng hay ho gì... (Suy nghĩ kỷ sẽ thấy việc xử lý lổi #NA trong trường hợp này cực kỳ dể)
ANH TUẤN
 
thường thì tên một người có khoảng từ 1 đến 6 chữ cái, còn một cách khác để tách tên là dùng hàm if , right, left. CT như sau :
tại ô D2 (ô lấy tên) :
=IF(LEFT(RIGHT(C2,2),1)=" ",RIGHT(C2,1),IF(LEFT(RIGHT(C2,3),1)=" ",RIGHT(C2,2),IF(LEFT(RIGHT(C2,4),1)=" ",RIGHT(C2,3),IF(LEFT(RIGHT(C2,5),1)=" ",RIGHT(C2,4),IF(LEFT(RIGHT(C2,6),1)=" ",RIGHT(C2,5),IF(LEFT(RIGHT(C2,7),1)=" ",RIGHT(C2,6),"#")))))).
để lấy họ và tên lót :
=LEFT(C2,LEN(C2)-LEN(D2))
 
mình mới tạo một CT mới ngắn hơn nè, các bạn xem thử
=RIGHT(A2,(LEN(A2)-SEARCH("-",SUBSTITUTE(A2," ","-",LEN(A2)-LEN(SUBSTITUTE(A2," ",""))))))
 
hoangdanh282vn đã viết:
mình mới tạo một CT mới ngắn hơn nè, các bạn xem thử
=RIGHT(A2,(LEN(A2)-SEARCH("-",SUBSTITUTE(A2," ","-",LEN(A2)-LEN(SUBSTITUTE(A2," ",""))))))

Tôi thử thì thấy còn 1 trường hợp không ra là khi sau Tên bị dư khoảng trắng, tôi không biết bỏ TRIM() vào đâu để loại trường hợp này, bạn làm tiếp nhé.
 
viendo đã viết:
Tôi thử thì thấy còn 1 trường hợp không ra là khi sau Tên bị dư khoảng trắng, tôi không biết bỏ TRIM() vào đâu để loại trường hợp này, bạn làm tiếp nhé.
Cứ thấy A2 thì bạn thêm trim vào. vì A2 chính là chuỗi ta cần xử lý.
 
Tách chuỗi qua phải từ khoảng trắng đầu tiên

Tôi đang xử lý số liệu tên và địa chỉ trên excel có dạng:
123/5 Nguyễn Trãi
Xin hỏi:
Để tách lấy chuỗi là tên đường (tức là tách lấy chuỗi qua phải từ khoảng trắng thứ n ) thì phải làm như thế nào?
Kính mong sự trợ giúp của diễn đàn!
 
Tôi đang xử lý số liệu tên và địa chỉ trên excel có dạng:
123/5 Nguyễn Trãi
Xin hỏi:
Để tách lấy chuỗi là tên đường (tức là tách lấy chuỗi qua phải từ khoảng trắng thứ n ) thì phải làm như thế nào?
Kính mong sự trợ giúp của diễn đàn!

Trim(mid(123/5 Nguyễn Trãi,n+1,1000))
 
Re hoangdanh282vn

Cảm ơn bạn đã trợ giúp!
Nhưng tôi thử vẫn không được, Hàm bạn gửi nó chỉ cắt từ vị trí thứ n+1 trở đi thôi, ý tôi nói là cắt từ khoảng trắng thứ nhất ( hoặc thứ n) qua phải.
Như ở VD :123/5 Nguyễn Trãi thì yêu cầu kết quả phải là Nguyễn Trãi nếu yêu cầu là khoảng trắng thứ nhất hoặc là Trãi nếu yêu cầu là khoảng trắng thứ hai
Tôi đang xử lý sắp sếp khách hàng theo tên đường, mà dữ liệu hiện đều có dạng 123/5 Nguyễn Trãi , số nhà trước , tên đường sau trên một ô excel
Xin bạn trợ giúp, cảm ơn!
 
Cảm ơn bạn đã trợ giúp!
Nhưng tôi thử vẫn không được, Hàm bạn gửi nó chỉ cắt từ vị trí thứ n+1 trở đi thôi, ý tôi nói là cắt từ khoảng trắng thứ nhất ( hoặc thứ n) qua phải.
Như ở VD :123/5 Nguyễn Trãi thì yêu cầu kết quả phải là Nguyễn Trãi nếu yêu cầu là khoảng trắng thứ nhất hoặc là Trãi nếu yêu cầu là khoảng trắng thứ hai
Tôi đang xử lý sắp sếp khách hàng theo tên đường, mà dữ liệu hiện đều có dạng 123/5 Nguyễn Trãi , số nhà trước , tên đường sau trên một ô excel
Xin bạn trợ giúp, cảm ơn!

Giả sử ô A1=123/5 Nguyễn Trãi
Công thức sẽ là:
=MID(TRIM(A1),FIND(" ",TRIM(A1),1)+1,LEN(TRIM(A1))-FIND(" ",TRIM(A1),1))
 
Mình gặp trường hợp muốn tách tháng từ định dang dd/mm/yyyy nhờ mọi người giúp đỡ
file kèm

File đính kèm theo ...........
 
Chỉnh sửa lần cuối bởi điều hành viên:
Mình gặp trường hợp muốn tách tháng từ định dang dd/mm/yyyy nhờ mọi người giúp đỡ
file kèm
Với dử liệu DATE đúng chuẩn, bạn không thể dùng các hàm xử lý chuổi (như Left, Right, Mid...) để tách các phần ngày tháng năm ra được
- Để lấy phần NGÀY: dùng hàm DAY
- Để lấy phần THÁNG: dùng hàm MONTH
- Để lấy phần NĂM: dùng hàm YEAR
--------
Cụ thể, công thức tại cell D2 là: =MONTH(B2)
 
Nhờ các mem giúp mình cách tách 1 chuỗi trong excel như sau: abc-defg hoặc abc (defg).
Mình muốn tách chuỗi defg ra ( tức là sau dấu "-" hoặc dấu "(" ), vì mình có 1 database rất nhìu dòng như vậy mà nếu ngồi mà cứ delete nó từng dòng thì chắc đeo kính lun quá. mình ko rành function trog excel lắm, nhờ mem cao thủ nào chỉ giáo giúp. tks nhìu...! :)
 
Nhờ các mem giúp mình cách tách 1 chuỗi trong excel như sau: abc-defg hoặc abc (defg).
Mình muốn tách chuỗi defg ra ( tức là sau dấu "-" hoặc dấu "(" ), vì mình có 1 database rất nhìu dòng như vậy mà nếu ngồi mà cứ delete nó từng dòng thì chắc đeo kính lun quá. mình ko rành function trog excel lắm, nhờ mem cao thủ nào chỉ giáo giúp. tks nhìu...! :)

Bắt đầu từ A1 cho chuỗi kiểu trên, dùng tạm tại B1 công thức này:
=IF(ISERR(FIND("-",A1)),RIGHT(A1,LEN(A1)-FIND("(",A1)),RIGHT(A1,LEN(A1)-FIND("-",A1)))
 
Cám ơn bạn dat_butmuc nhìu nha!, công thức rất chính xác! :)
Còn nếu trường hợp lấy chuỗi ngược lại (tức là lấy ra abc, trước dấu "-" hoặc "(" ) là mình chỉ cần đổi hàm Right thành Left fải không ah, mình đã thử cách này nhưng kquả không chính xác khi chuỗi dài hơn. Nhờ bạn dat_butmuc chỉ giúp, Tks bạn nhìu!
http://www.giaiphapexcel.com/forum/member.php?57544-dat_butmuc
 
Web KT
Back
Top Bottom