Tách tên TỈNH từ địa chỉ có sẳn (1 người xem)

Liên hệ QC

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

anhtuan1066

Thành viên gạo cội
Tham gia
10/3/07
Bài viết
5,802
Được thích
6,912
Trong file đính kèm, cột A là ĐỊA CHỈ.. giờ nhờ các bạn góp ý dùng công thức gì đễ tách ra tên TỈNH sang cột B (Danh sách tỉnh nằm ở sheet TINH và đã dc đặt name là DMT)
Mến
ANH TUẤN
 
Lần chỉnh sửa cuối:
anhtuan1066 đã viết:
Trong file đính kèm, cột A là ĐỊA CHỈ.. giờ nhờ các bạn góp ý dùng công thức gì đễ tách ra tên TỈNH sang cột B (Danh sách tỉnh nằm ở sheet TINH và đã dc đặt name là DMT)
Mến
ANH TUẤN

Các bước có thể như sau :
  1. Bỏ , VietNam cuối cùng đi
  2. tách lấy tỉnh giống như TH tách tên không dùng VBA
Còn nếu không thì dùng 1 UFD thì thoải mái hơn.

Thân!
 
Ông Tía ơi, cho hỏi ngoài lề một chút.
Thấy trên 4R hay dùng chữ UFD, nó là cái gì vậy?
 
Em dùng VBA nhé, chưa làm bài nào dữ liệu lớn đến vậy, nếu bác lập công thức mà kéo xuống 11547 dòng thì cũng vất vả đấy.
 

File đính kèm

Quên... ko làm bằng VBA nha! Tôi nghĩ công thức rất đơn giản đấy
Với BNTT: UDF nghĩa là User Defined Function (hàm tự tạo)
---------------------------------
Xin các bạn lưu ý cho 1 điểm khác nhau giữa bài toàn này với việc tách họ tên, đó là: Bài này có sẳn 1 danh sách các tên tỉnh.. Vì thế mà phải bám vào danh sách này là chính... Có thể sẽ có vấn đề về SAI CHÍNH TẢ và cách gọi tên ko thống nhất, ví dụ như: TP HỒ CHÍ MINH với TP HCM, Bắc Kạn với Bắc Cạn, KonTom với Kom Tum ... vân vân và 1 vài chi tiết nhỏ khác... điều này có thể chỉnh sửa sau... Mục đích cuối cùng vẫn là THUẬT TOÁN
ANH TUẤN
 
Lần chỉnh sửa cuối:
anhtuan1066 đã viết:
Quên... ko làm bằng VBA nha! Tôi nghĩ công thức rất đơn giản đấy
Với BNTT: UDF nghĩa là User Defined Function (hàm tự tạo)
ANH TUẤN
Đây là câu hỏi hay câu đố vậy.
Mr Okebab đã trả lời rồi.
Bạn có đáp án hay thì gởi luôn đi.
Xem lại thấy cũng có cái hay của nó. Tách làm sao chỉ có DMT thỏa DK
Cám ơn!
 
Lần chỉnh sửa cuối:
Tất nhiên tôi đã có đáp án nên mới nói là công thức đơn giản... Tuy nhiên tôi vẫn muốn nghe thêm ý kiến của các bạn... Biết đâu có cách hay hơn...
Tôi dùng hàm FIND hoặc SEARCH, tiếp theo là INDEX, MATCH.. chỉ vậy thôi, công thức rất ngắn!
Còn về file macro của bạn gì đó, theo tôi nhận xét là bạn ấy dựa vào dấu "," đễ phân biệt tên tình... Thuật toán này ko ổn đâu, vì có thể người ta viết địa chỉ theo kiểu Xã... -Tỉnh Đồng Nai (dùng dấu "-") thì kết quả sẽ sai ngay lập tức...
Tóm lại, cách làm của tôi là dò tìm trong chuổi, nếu thấy trùng với em nào trong danh sách chuẩn thì lôi cổ hắn ra
Về chuyện dử liệu nhiều có thể làm tăng dung lượng khi tạo công thức thì ta ko lo, vì khi tạo xong công thức, kiểm tra nếu kết quả ko sai thì ta copy, paste value là xong (xóa luôn công thức)
Mong các bạn góp ý thêm... Cái này ko phải là đố đâu ThuNghi ơi..
ANH TUẤN
 
Em làm được rồi, nhưng mà công thức nó dài khủng khiếp.
Ví dụ, chỉ để lấy chữ cuối cùng của tên tỉnh ("Nội" trong "Hà Nội") thôi, thì nó đã như thế này:
PHP:
=IF(ISERR(FIND(" ",LEFT(A2,LEN(A2)-10))),LEFT(A2,LEN(A2)-10), RIGHT(LEFT(A2,LEN(A2)-10), LEN(LEFT(A2,LEN(A2)-10))-FIND("*", SUBSTITUTE(LEFT(A2,LEN(A2)-10)," ","*",LEN(LEFT(A2,LEN(A2)-10))-LEN(SUBSTITUTE(LEFT(A2,LEN(A2)-10)," ",""))))))
Thấy bác nói
công thức rất ngắn, nên mắc cỡ quá, hổng dám trả lời nữa (!)
Thôi bác đừng đố tụi em nữa, gửi bài giải lên cho tụi em tham khảo với. Cảm ơn nhìu nhìu.
 
Lần chỉnh sửa cuối:
nếu thích tách thôi, ko phụ thuộc DTM thì công thức sau đơn giản

=IF(TRIM($A2)="","",MID(TRIM($A2),FIND("#",SUBSTITUTE(TRIM($A2),",","#",LEN(TRIM($A2))-1-LEN(SUBSTITUTE(TRIM($A2),",",""))))+2,FIND("#",SUBSTITUTE(TRIM($A2),",","#",LEN(TRIM($A2))-LEN(SUBSTITUTE(TRIM($A2),",",""))))-2-FIND("#",SUBSTITUTE(TRIM($A2),",","#",LEN(TRIM($A2))-1-LEN(SUBSTITUTE(TRIM($A2),",",""))))))

anhtuan..... có vẻ thích đưa câu đố nhỉ, nhưng lần sau bạn đề bài bác nên chi tiết và chặt hơn 1 chút ví dụ: đề trên bạn phải nói rõ hạn chế VBA, đặt tình huống chỉ dựa vào danh sách DMT đã có. để a e đỡ mất thời gian nhỉ

Nhưng dù sao, cũng rất cám ơn anhtuan... hay đưa ra những chủ đề hay, thanks one more! hic
 
Chỉnh sửa lần cuối bởi điều hành viên:
hy vọng cách tiếp theo sẽ phù hợp ý kiến a tuấn đó là,

+ đặt 1 name timk =IF(ISNUMBER(FIND(DMT,DATA!$A2)),1,0)
+ công thức tại B2 là: =INDEX(DMT,MATCH(1,timk,0))

thế là OK,

nhưng có nhược điểm là:
- nếu trong data mà có ô A2652: "925/24/2 Lê Hồng Phong Phú Thọ TDM, Bình Dương, Việt Nam" -> lúc này kết quả trả về là tỉnh Phú Thọ ....... ko phải Bình Dương

xử lý vấn đề này chắc ko khó - nhưng phải xét thêm dấu phẩy "," không như theo ý atuan....... hic

- vấn đề nữa nếu tỉnh viết tắt (như TP HCM) ko có trong danh sách -> kết quả là 0 ....... -> suy ra cần thêm cả tên viết tắt vào DMT

Vậy mong các thành viên góp ý nhé

Ah, atuan... cái này ứng dụng vào các Vấn đề thực tế nào nhỉ ...... chắc không chỉ tách thế này thôi, a liệt kê ra cho các TV lần sau gặp ứng dụng luôn, thanks


 
Lần chỉnh sửa cuối:
Cảm ơn Tigertiger góp ý, tại quên thôi... hi.. hi... Rút kinh nghiệm... Nhưng các bạn cũng đễ ý thấy, nếu tôi muốn làm bằng VBA thì đã ko đưa bài này vào mục "Excel và các công thức" rồi, đúng ko?
Cách của bạn của rất hay, test thử cho kết quả tương đối chính xác... Sai ở 1 điểm nguy hiểm nhất, đó là nếu như người ta viết thế này: "B24 Lô 20 khu đô thị Định Công Hoàng Mai Hà Nội Việt Nam" ko chấm phẩy gì cả thì công thức toi ngay.. hoặc giã người ta thay dấu "," thành dấu "-" công thức cũng tịt...
Cách làm của tôi là:
1> Đặt con trỏ tại cell C2 (bắt buột), vào menu Insert\Name Define, tạo 1 name tên TIM, refer to
Mã:
=IF(ISERROR(FIND(DMT,DATA!$A2,1)),"",FIND(DMT,DATA!$A2,1))
2> Bây giờ công thức tại cell C2 sẽ là:
Mã:
=IF(MAX(TIM)=0,"KHÔNG TÌM THẤY",INDEX(DMT,MATCH(MAX(TIM),TIM,0),1))
Kéo file xuống, chỉnh sửa lại 1 tí vụ sai chính tả và vụ ko thống nhất cách gọi tên tỉnh ở 2 danh sách, bảo đảm kết quả cuối cùng sẽ ko sai 1 ly... Chấp luôn ai muốn viết "," hay "*" hay "-" gì gì đó mặc kệ, thậm chí tên tỉnh nằm trong 1 đóng hằm bà lằng theo kiểu "hagasfgasfgasfgaĐồng Thápgagasdfgasfyeryuidfbnsd" nó vẫn tìm ra dc như thường, miễn sao trong chuổi có từ cần tìm!
Mời các bạn xem file và góp ý! Vì tôi nghĩ bài toán này rất thực tế trong công việc văn phòng

****************************************************

Một điều nữa nhờ các bạn xem giùm: Trong file này có thể dùng hàm FIND hoặc SEARCH, nhưng test thử thì FIND chạy nhanh hơn SEARCH, tại sao vậy?
Còn nữa, hàm FIND có phân biệt chử hoa và thường, tức Hà Nội thì khác với Hà nội, còn SEARCH thì ko... (Mới biết vụ này... )
ANH TUẤN
 

File đính kèm

Lần chỉnh sửa cuối:
nếu trong data mà có ô A2652: "925/24/2 Lê Hồng Phong Phú Thọ TDM, Bình Dương, Việt Nam" -> lúc này kết quả trả về là tỉnh Phú Thọ ....... ko phải Bình Dương
Vì thế nên mới nhờ các cao thủ hoàn thiện... Nhưng may quá, trong danh sách ko có vụ trùng này... Hên thật!
Ah, atuan... cái này ứng dụng vào các Vấn đề thực tế nào nhỉ ...... chắc không chỉ tách thế này thôi, a liệt kê ra cho các TV lần sau gặp ứng dụng luôn, thanks
Ứng dụng thì thiếu gì, nếu bạn có làm văn phòng thì thử nghĩ xem! Như tôi hiện giờ cần lấy mã Bưu chính của từng em 1, tất nhiên điều đầu tiên tôi cần phải biết nó thuộc tỉnh gì rồi.. Tách ra xong thì VLOOKUP với bãng mã bưu chính...
vấn đề nữa nếu tỉnh viết tắt (như TP HCM) ko có trong danh sách -> kết quả là 0
Cái này ko cần thiết phải lập công thức, sửa lại bằng tay trong DMT cho tương thích 2 danh sách là dc rồi...
Còn như trong sheet DATA họ viết lẩn lộn giữa 2 cách thì sẽ dùng chức năng Find and Replace của Excel đễ thay thế cho thống nhất 1 kiểu
Mến
ANH TUẤN
 
  1. Em làm VP hoài mà chẳng thấy vụ này
  2. Nếu coa ai làm như vậy thì nên theo hướng : Khuyên họ tổ chức theo CSDL : Có cột tỉnh riêng
  3. Nếu VP có vụ này : Như là TH của Bác : Tỉnh Phú Thọ là hoàn toàn có (trong DS tỉnh, nếu bác không có là do bác thiếu)
  4. Làm công thức như bác nghĩ là đơn giản, nhưng thực tế là không đơn giản đâu, em cũng hơi khá về excel mà mãi mới hiểu mà (Đặt name đã khó, đặt name theo địa chỉ tương đối còn cao hơn . . . . ). Theo em chi bằng cứ làm một cái UFD sử dụng thì đơn giản hơn nhiều. (Đơn giản để sử dụng, hơi khó hiểu để . . . hiểu)
Thân!
 
Khả năng sử dụng công thức và hàm của bác Tuấn ngày càng cao siêu. Bác nghĩ ra quá nhiều độc chiêu quá hay. Define Name của bác quả là cao siêu.

Chúc mừng anh,

Thanh Phong
 
Công thức rất hay nhưng cao siêu quá. Cám ơn nhiều.
Nghĩ mãi mà chưa ra match(max(tim),tim,0) rất hay mà khó hiểu.
Hy vọng tôi sẽ có ứng dụng về chuyện này. Chắc sẽ ứng dụng vào lọc tên KH trong diễn giải.
 
Nhân bạn Tigertiger lo ngại về việc trong chuổi có 2 từ cùng chứa tên tỉnh, chẳng hạn là Xã... Phú Thọ, TDM, Bình Dương.. như vậy thì hàm này sẽ nhận ra là tỉnh Phú Thọ hay Bình Dương?
Tôi cũng ko lường trước dc trường hợp này, nhưng thật may mắn (chuột sa chỉnh gạo) trong hàm có dùng MAX, nên nó luôn luôn lấy từ cuối cùng... hi.. hi..
Theo cách viết địa chỉ thì thường người ta viết TỈNH nằm sau cùng, nên dù phía trước nó có từ chứa tên trùng với tên tỉnh cũng ko có vấn đề gì cả...
KO CHIẾN TỰ NHIÊN THÀNH
Quá sướng! ha.. ha..
*******************************
Nếu coa ai làm như vậy thì nên theo hướng : Khuyên họ tổ chức theo CSDL : Có cột tỉnh riêng
Bắp ơi! Cái này là tôi nhận lời nhờ giúp của bạn khác, tôi cũng nghĩ nên có cột tỉnh riêng, nhưng trong dử liệu của bạn ấy ko có thì biết làm sao? Đành phải mày mò cho nó ra... Tất nhiên phải dựa và sự hổ trợ của các hàm chứ chẳng lẽ tự gõ... Nói chung là chẳng khoái tí nào khi nhận file thiếu thông tin như thế... Hic.. Hic... Và đang tỗ chức dử liệu lại đây!
ANH TUẤN
 
Lần chỉnh sửa cuối:
Nhìn chung cái hàm hoặc code nếu làm được công việc như trên cũng là rất hữu dụng.

Vấn đề này cũng thường gặp phải đối với dân văn phòng.

Ok, cảm ơn các giải pháp trong đề tài này!
 
anhtuan1066 đã viết:
Bắp ơi! Cái này là tôi nhận lời nhờ giúp của bạn khác, tôi cũng nghĩ nên có cột tỉnh riêng, nhưng trong dử liệu của bạn ấy ko có thì biết làm sao? Đành phải mày mò cho nó ra... Tất nhiên phải dựa và sự hổ trợ của các hàm chứ chẳng lẽ tự gõ... Nói chung là chẳng khoái tí nào khi nhận file thiếu thông tin như thế... Hic.. Hic... Và đang tỗ chức dử liệu lại đây!
ANH TUẤN
Nếu cần tổ chức lại dữ liệu sao Tuấn không thay tên tỉnh bằng mã tỉnh; Có phải khi đó sẽ nhẹ nhàng & thanh cảnh hơn không;
Làm bài tính xem nha:
VD CSDL của 'Người Dùng' (ND) có 1 vạn records;
Độ dài tên tỉnh của nước ta cho là trung bình 12 ký tự;
Nếu gán tên tỉnh ta sẽ phải tốn 10.000 * 12 ;
Trong khi đó, cách mình gợi í sẽ chỉ là
10.000 *2 + 80 * (2+ 12) mà thôi!
2 - Mã các tỉnh, thành;
80 = Số tỉnh thành;
Chí ít giảm đi 1/3 & với sự hỗ trợ của Combo ND sẽ không nhập sai chính tả!
theo kiểu Húê; Nghĩa/Nghiã
 
Cái này có liên quan đến em đây mà.

Anh Tuấn đang tìm cách giúp em, biết ơn bác nhiều nhiều lắm ạ. Quả là có hơi làm khó cho Bác nhưng không biết làm sao cả.
 
Cảm ơn bác SA... Em biết phải làm sao rồi... Đây cũng là giãi pháp hay, tiết kiệm dc cái nào hay cái nấy vì dử liệu quá nhiều...
Với Ngodinhquan: Tôi đang cố gắng hoàn tất, chủ yếu vẫn là việc xử lý tốc độ... Bạn chờ nhé!
ANH TUẤN
 
Web KT

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

Back
Top Bottom