Nhờ hỗ trợ vấn đề tra cứu ngược

Liên hệ QC

guctoosayohzeml

Thành viên mới
Tham gia
2/7/21
Bài viết
19
Được thích
4
Xin chào mọi người. Xin mọi người hỗ trợ vấn đề liên quan đến địa chỉ. Cụ thể: Mình có một file địa chỉ với nhiều định dạng.

Nếu làm theo cách thông thường, lấy giá trị của 1 ô trong cột C (sheet EDIT) để đối chiếu với bảng dò tìm (sheet BANG DO TIM), tìm ra mã số tương ứng (mã này có thể 6 số (Xã - Huyện - Tỉnh), 4 số (Huyện - Tỉnh) hoặc 2 số (Tỉnh)) thì cực kỳ phức tạp vì các giá trị ở cột C được nhập bởi nhiều người (nhiều định dạng khác nhau). Mình đã thử tạo thêm khoảng 10 cột phụ nhưng không khả thi.

Nên mình có ý tưởng sẽ nối các ô cột B, C, D (sheet BANG DO TIM) với các ký tự đại diện. VD: Nối B2, C2, D2 của sheet BANG DO TIM sẽ có chuỗi *ĐA PHƯỚC*AN PHÚ*AN GIANG* (* là ký tự đại diện). Lấy chuỗi này so sánh lần lượt với tất cả các ô ở cột C (sheet EDIT - so sánh từ dòng 2 đến dòng cuối cùng) .

Giả dụ kết quả phù hợp là ô C100 -> con trỏ chuột chuyển sang ô D100, chèn 1 ô vào ô D100 (Shift Cell Right), dán chuỗi *ĐA PHƯỚC*AN PHÚ*AN GIANG* vào ô D100, chèn 1 ô vào ô D100 (Shift Cell Right), dán mã số của *ĐA PHƯỚC*AN PHÚ*AN GIANG* là dãy 890313 vào ô D100.

Và cứ như vậy lặp lại cho đến dòng cuối cùng trong sheet BANG DO TIM.

Kết quả trả về ở sheet EDIT không nhất thiết phải là Mã 6 số mà có thể là mã 4 số hoặc thậm chí là mã 2 số. Vì sau bước này còn bước xử lý thủ công nữa ạ.

Rất mong mọi người hỗ trợ. Cám ơn mọi người rất nhiều ạ.

HINH ANH.png
 

File đính kèm

  • Dia chi nhieu dinh dang.xlsx
    1.3 MB · Đọc: 2
Lần chỉnh sửa cuối:
Sao mà cảm xúc gớm thế.
Thay vì kể câu chuyện dài thoòng của mình thì chỉ cần ngắn gọn mấy cái gạch đầu dòng vô cùng mạch lạc, dễ hiểu:
- Cho bảng dữ liệu nguồn ở sheet abc, tại cột/ dòng xyz / 123.
- Lấy cái gì, ở đâu rồi tìm ở bảng dữ liệu nguồn đã cho? Tìm như thế nào (quy luật, yêu cầu đối chiếu ra sao)?
- Kết quả tìm được ghi vào đâu?
 
Upvote 0
Sao mà cảm xúc gớm thế.
Thay vì kể câu chuyện dài thoòng của mình thì chỉ cần ngắn gọn mấy cái gạch đầu dòng vô cùng mạch lạc, dễ hiểu:
- Cho bảng dữ liệu nguồn ở sheet abc, tại cột/ dòng xyz / 123.
- Lấy cái gì, ở đâu rồi tìm ở bảng dữ liệu nguồn đã cho? Tìm như thế nào (quy luật, yêu cầu đối chiếu ra sao)?
- Kết quả tìm được ghi vào đâu?
Cám ơn bạn đã hướng dẫn :) Mình xin rút kinh nghiệm cho lần sau :)
 
Upvote 0
...
Nên mình có ý tưởng sẽ nối các ô cột B, C, D (sheet BANG DO TIM) với các ký tự đại diện. VD: Nối B2, C2, D2 của sheet BANG DO TIM sẽ có chuỗi *ĐA PHƯỚC*AN PHÚ*AN GIANG* (* là ký tự đại diện). Lấy chuỗi này so sánh lần lượt với tất cả các ô ở cột C (sheet EDIT - so sánh từ dòng 2 đến dòng cuối cùng) .

Giả dụ kết quả phù hợp là ô C100 -> con trỏ chuột chuyển sang ô D100, dán chuỗi *ĐA PHƯỚC*AN PHÚ*AN GIANG* vào ô D100, chèn 1 ô vào ô D100 (Shift Cell Right), dán mã số của *ĐA PHƯỚC*AN PHÚ*AN GIANG* là dãy 890313 vào ô D100.

Và cứ như vậy lặp lại cho đến dòng cuối cùng trong sheet BANG DO TIM.
...
Ý tưởng này chỉ khả thi nếu không có những địa danh gần giống nhau.

VD. Nối B5, C5, D5 ra "*TỐNG DUY TÂN*QUẬN 10*TP HCM*"
Chạy vào Sheet Ê đít, tìm ra C20, làm việc ở ô D20.
Đến lượt nối B15, C15, D15, ra "*DUY TÂN*QUẬN 1*TP HCM*"
Chạy vào Sheet Ê đít, cũng tìm ra C20, làm việc -> xoá chồng D20.
 
Upvote 0
Ý tưởng này chỉ khả thi nếu không có những địa danh gần giống nhau.

VD. Nối B5, C5, D5 ra "*TỐNG DUY TÂN*QUẬN 10*TP HCM*"
Chạy vào Sheet Ê đít, tìm ra C20, làm việc ở ô D20.
Đến lượt nối B15, C15, D15, ra "*DUY TÂN*QUẬN 1*TP HCM*"
Chạy vào Sheet Ê đít, cũng tìm ra C20, làm việc -> xoá chồng D20.
Cho mình cám ơn Ví dụ của bạn, Ví dụ quá hay.

Cám ơn bạn đã chỉ ra lỗi sai trong quy trình trên, mình xin sửa lại thành:

Giả dụ kết quả phù hợp là ô C100 -> con trỏ chuột chuyển sang ô D100, chèn 1 ô vào ô D100 (Shift Cell Right), dán chuỗi *ĐA PHƯỚC*AN PHÚ*AN GIANG* vào ô D100, chèn 1 ô vào ô D100 (Shift Cell Right), dán mã số của *ĐA PHƯỚC*AN PHÚ*AN GIANG* là dãy 890313 vào ô D100.


Theo như mình nghĩ (không biết đúng hay sai), sẽ có 03 trường hợp xảy ra:
- Có những địa chỉ không có kết quả nào (mình đoán vậy - mình sẽ xử lý thủ công để tìm ra mã địa chỉ tương ứng)
- Có những địa chỉ cho ra 1 kết quả (xác suất đúng có thể là 100%).
- Có những địa chỉ cho ra nhiều kết quả ( ô tương ứng cùng dòng ở các cột D, E, F, G ,... đều có thông tin - mình sẽ xử lý thủ công để tìm ra địa chỉ tương ứng).

Mong bạn cho ý kiến
 
Lần chỉnh sửa cuối:
Upvote 0
vì các giá trị ở cột C được nhập bởi nhiều người (nhiều định dạng khác nhau).
1. Làm việc nhóm mà không có kỷ luật, mỗi người làm theo ý mình thì không hiệu quả đâu. Nếu tôi là chủ thì tôi có qui định. Ai không chấp hành thì cảnh cáo, trừ lương, sa thải. Làm gì có chuyện thằng đi làm thuê mà làm theo kiểu ban ơn. Đẩy sấp mặt ra ngoài đường chứ còn do dự gì.

2. Muốn mọi người cùng nhập dữ liệu như nhau, theo một kiểu, chính xác v...v thì cần phải tạo cho người ta một cách chung để nhập dữ liệu. Sao cho không thể mỗi người nhập một khác, hoặc khác với dữ liệu gốc, dữ liệu cần so sánh. Không thể có chuyện trong sheet BANG DO TIM có:

C12401 = MÙ CĂNG CHẢI

, trong khi nhân viên nhập trong EDIT:

C3 = Mù Cang Chải, Yên Bái

Hoặc nhập trong EDIT C3 = Tổ 3, P Tân Thịnh, TP Thái Nguyên, Phú BìnhThái Nguyên

Như trên thì tỉnh là gì? Làm quái gì có tỉnh Phú BìnhThái Nguyên.

Nếu tính cả chuyện tiếng Việt nữa thì hơi rách việc. Nhập tiếng Việt có thể dùng unicode dựng sẵn (trong Unikey là bảng mã Unicode) hoặc unicoe tổ hợp (trong Unikey là bảng mã Unicode tổ hợp). Nếu ông A gõ unicode dựng sẵn mà bà B gõ unicode tổ hợp thì sau đó dò tìm khó khăn rồi. Hoặc anh C gõ một kiểu unicode trong khi dữ liệu nguồn ở BANG DO TIM lại dùng unicode khác.

Để không thể tùy tiện thì có thể nhập dữ liệu bằng vd. UserForm. Không cho tự gõ mà chỉ cho chọn từ danh sách (ComboBox?) được lấy từ sheet BANG DO TIM. Code sẽ tự gộp 3 ComboBox Xã, Huyện, Tỉnh trước khi đập xuống cột C sheet EDIT. Do code tự gộp 3 dữ liệu nên không có chuyện đặt dấu phẩy không đúng chỗ nữa - sẽ không thể có Phú BìnhThái Nguyên, mà chỉ có Phú Bình, Thái Nguyên.

Làm gì cũng phải nghĩ ngay từ đầu, lường trước những khó khăn. Bây giờ "làm một đống" ra rồi thì dọn hơi mệt.
 
Upvote 0
1. Làm việc nhóm mà không có kỷ luật, mỗi người làm theo ý mình thì không hiệu quả đâu. Nếu tôi là chủ thì tôi có qui định. Ai không chấp hành thì cảnh cáo, trừ lương, sa thải. Làm gì có chuyện thằng đi làm thuê mà làm theo kiểu ban ơn. Đẩy sấp mặt ra ngoài đường chứ còn do dự gì.

2. Muốn mọi người cùng nhập dữ liệu như nhau, theo một kiểu, chính xác v...v thì cần phải tạo cho người ta một cách chung để nhập dữ liệu. Sao cho không thể mỗi người nhập một khác, hoặc khác với dữ liệu gốc, dữ liệu cần so sánh. Không thể có chuyện trong sheet BANG DO TIM có:

C12401 = MÙ CĂNG CHẢI

, trong khi nhân viên nhập trong EDIT:

C3 = Mù Cang Chải, Yên Bái

Hoặc nhập trong EDIT C3 = Tổ 3, P Tân Thịnh, TP Thái Nguyên, Phú BìnhThái Nguyên

Như trên thì tỉnh là gì? Làm quái gì có tỉnh Phú BìnhThái Nguyên.

Nếu tính cả chuyện tiếng Việt nữa thì hơi rách việc. Nhập tiếng Việt có thể dùng unicode dựng sẵn (trong Unikey là bảng mã Unicode) hoặc unicoe tổ hợp (trong Unikey là bảng mã Unicode tổ hợp). Nếu ông A gõ unicode dựng sẵn mà bà B gõ unicode tổ hợp thì sau đó dò tìm khó khăn rồi. Hoặc anh C gõ một kiểu unicode trong khi dữ liệu nguồn ở BANG DO TIM lại dùng unicode khác.

Để không thể tùy tiện thì có thể nhập dữ liệu bằng vd. UserForm. Không cho tự gõ mà chỉ cho chọn từ danh sách (ComboBox?) được lấy từ sheet BANG DO TIM. Code sẽ tự gộp 3 ComboBox Xã, Huyện, Tỉnh trước khi đập xuống cột C sheet EDIT. Do code tự gộp 3 dữ liệu nên không có chuyện đặt dấu phẩy không đúng chỗ nữa - sẽ không thể có Phú BìnhThái Nguyên, mà chỉ có Phú Bình, Thái Nguyên.

Làm gì cũng phải nghĩ ngay từ đầu, lường trước những khó khăn. Bây giờ "làm một đống" ra rồi thì dọn hơi mệt.
Cám ơn bạn. Khi mình nhận việc thì đã tồn tại danh sách này nên đành phải "giải quyết hiện tại" rồi mới dám"nhìn về tương lai" :) . Sau đợt này, mình dự định sẽ triển khai danh sách xã huyện tỉnh giống như trong Video này:
Liên kết: https://www.youtube.com/watch?v=lQrCS3PqLWM

Trân trọng cám ơn góp ý của bạn.
 
Lần chỉnh sửa cuối:
Upvote 0
Chuyện nhập địa chỉ vô trật tự này tôi đã từng gặp nhưng ở 1 tình huống khác.

Với dữ liệu của bạn, quả thực là gian nan khi tìm đúng mã số cho các địa chỉ thô kia. Dùng VBA có thể xác định được cỡ 95%. Còn lại phải làm thủ công.
 
Upvote 0
Bài dạng này lâu lâu lại có người hỏi.
Với dữ liệu bài #1 thì vẫn khá khẩm hơn mấy thớt trước.
Dùng kỹ thuật tạo thư viện và tra cứu ngược sẽ làm được + sự chịu thương, chịu khó = Xong việc.
Với các trường hợp địa chỉ cụt ngủn: "KTX Trường SP3, Bản Bánh Thanh Xương, Chung cư vinh trung, Sara, Đô Lương, ... " vẫn hoàn toàn làm được với trợ giúp của API.
Với các trường hợp chỉ có mỗi tên Tỉnh/ TP: "Bắc Ninh, Hà Nội, Bắc Giang, ... " thì cuốn chiếu thả sông.
 
Upvote 0
[QUOTE="guctoosayohzeml, post: 1035595,

Cám ơn bạn đã chỉ ra lỗi sai trong quy trình trên, mình xin sửa lại thành:

Giả dụ kết quả phù hợp là ô C100 -> con trỏ chuột chuyển sang ô D100, chèn 1 ô vào ô D100 (Shift Cell Right), dán chuỗi *ĐA PHƯỚC*AN PHÚ*AN GIANG* vào ô D100, chèn 1 ô vào ô D100 (Shift Cell Right), dán mã số của *ĐA PHƯỚC*AN PHÚ*AN GIANG* là dãy 890313 vào ô D100.

Trong sh BANG DO hơn 12000 dòng thì dòng có đủ cả 3 yếu tố (Xã huyện tỉnh) là 11696, có 2 yếu tố (huyện tỉnh) là 12408, chỉ có yếu tố tỉnh là 12471. Tôi đã dùng nhiều cách có thể thì chỉ dò tìm ra nhiều nhất được 549 dòng có trùng 3 yếu tố (Xã, huyện, tỉnh) với Sh BANG DO trên tổng số 1912 dòng cần dò tìm.
Có thể do dữ liệu nhập vào của 2 sh không thống nhất , không đủ.....
P/S: Code viết theo kiểu củ chuối , chạy cũng tương đối chậm, Anh em nào có ghé qua xem code và cho góp ý để hoàn thiện hơn nhé
 

File đính kèm

  • Dia chi nhieu dinh dang.xlsb
    750.8 KB · Đọc: 5
Upvote 0
Cám ơn @HUONGHCKT,

"Trong sh BANG DO hơn 12000 dòng thì dòng có đủ cả 3 yếu tố (Xã huyện tỉnh) là 11696, có 2 yếu tố (huyện tỉnh) là 12408, chỉ có yếu tố tỉnh là 12471. Tôi đã dùng nhiều cách có thể thì chỉ dò tìm ra nhiều nhất được 549 dòng có trùng 3 yếu tố (Xã, huyện, tỉnh) với Sh BANG DO trên tổng số 1912 dòng cần dò tìm."
Vấn đề này là do chủ ý của mình muốn kết quả trả về (ở sheet EDIT) nhiều nhất có thể (sau bước này, còn bước sàng lọc thủ công nữa ạ).

Bạn có thể giúp mình chỉnh sửa đoạn code để đúng với quy trình ".....Giả dụ kết quả phù hợp là ô C100 -> con trỏ chuột chuyển sang ô D100, chèn 1 ô vào ô D100 (Shift Cell Right), dán chuỗi *ĐA PHƯỚC*AN PHÚ*AN GIANG* vào ô D100, chèn 1 ô vào ô D100 (Shift Cell Right), dán mã số của *ĐA PHƯỚC*AN PHÚ*AN GIANG* là dãy 890313 vào ô D100." được không ạ?

Chúc bạn một ngày vui vẻ.
 
Upvote 0
Cám ơn @HUONGHCKT,

"Trong sh BANG DO hơn 12000 dòng thì dòng có đủ cả 3 yếu tố (Xã huyện tỉnh) là 11696, có 2 yếu tố (huyện tỉnh) là 12408, chỉ có yếu tố tỉnh là 12471. Tôi đã dùng nhiều cách có thể thì chỉ dò tìm ra nhiều nhất được 549 dòng có trùng 3 yếu tố (Xã, huyện, tỉnh) với Sh BANG DO trên tổng số 1912 dòng cần dò tìm."
Vấn đề này là do chủ ý của mình muốn kết quả trả về (ở sheet EDIT) nhiều nhất có thể (sau bước này, còn bước sàng lọc thủ công nữa ạ).

Bạn có thể giúp mình chỉnh sửa đoạn code để đúng với quy trình ".....Giả dụ kết quả phù hợp là ô C100 -> con trỏ chuột chuyển sang ô D100, chèn 1 ô vào ô D100 (Shift Cell Right), dán chuỗi *ĐA PHƯỚC*AN PHÚ*AN GIANG* vào ô D100, chèn 1 ô vào ô D100 (Shift Cell Right), dán mã số của *ĐA PHƯỚC*AN PHÚ*AN GIANG* là dãy 890313 vào ô D100." được không ạ?

Chúc bạn một ngày vui vẻ.
Tôi nghĩ việc lớn là tỷ lệ tìm thành công/tổng số có đủ lớn để đơn giản việc làm bằng tay và kết quả tìm thành công có đủ tin cậy không, chứ chuyện chèn + dán kia bạn làm thủ công 1 tí là xong
 
Upvote 0
Cám ơn @HUONGHCKT,

"Trong sh BANG DO hơn 12000 dòng thì dòng có đủ cả 3 yếu tố (Xã huyện tỉnh) là 11696, có 2 yếu tố (huyện tỉnh) là 12408, chỉ có yếu tố tỉnh là 12471. Tôi đã dùng nhiều cách có thể thì chỉ dò tìm ra nhiều nhất được 549 dòng có trùng 3 yếu tố (Xã, huyện, tỉnh) với Sh BANG DO trên tổng số 1912 dòng cần dò tìm."
Vấn đề này là do chủ ý của mình muốn kết quả trả về (ở sheet EDIT) nhiều nhất có thể (sau bước này, còn bước sàng lọc thủ công nữa ạ).

Bạn có thể giúp mình chỉnh sửa đoạn code để đúng với quy trình ".....Giả dụ kết quả phù hợp là ô C100 -> con trỏ chuột chuyển sang ô D100, chèn 1 ô vào ô D100 (Shift Cell Right), dán chuỗi *ĐA PHƯỚC*AN PHÚ*AN GIANG* vào ô D100, chèn 1 ô vào ô D100 (Shift Cell Right), dán mã số của *ĐA PHƯỚC*AN PHÚ*AN GIANG* là dãy 890313 vào ô D100." được không ạ?

Chúc bạn một ngày vui vẻ.

Của bạn đây, trong khi chờ các anh chi em khác cung cấp giải pháp triệt để thì dùng tạm code này.
Cột D của sh EDIT có các số 1,2,3... là số giả định. bạn có thể xóa.

Nhấn vào nút CHẠY CODE và tận hưởng thành quả.
Chúc vui, khỏe, thành công!
 

File đính kèm

  • Dia chi nhieu dinh dang.xlsb
    753.5 KB · Đọc: 9
Upvote 0
Bài dạng này lâu lâu lại có người hỏi.
Với dữ liệu bài #1 thì vẫn khá khẩm hơn mấy thớt trước.
Dùng kỹ thuật tạo thư viện và tra cứu ngược sẽ làm được + sự chịu thương, chịu khó = Xong việc.
Với các trường hợp địa chỉ cụt ngủn: "KTX Trường SP3, Bản Bánh Thanh Xương, Chung cư vinh trung, Sara, Đô Lương, ... " vẫn hoàn toàn làm được với trợ giúp của API.
Với các trường hợp chỉ có mỗi tên Tỉnh/ TP: "Bắc Ninh, Hà Nội, Bắc Giang, ... " thì cuốn chiếu thả sông.
"Với các trường hợp địa chỉ cụt ngủn: "KTX Trường SP3, Bản Bánh Thanh Xương, Chung cư vinh trung, Sara, Đô Lương, ... " vẫn hoàn toàn làm được với trợ giúp của API."
Mình là dân ngoại đạo nên chưa hiểu hết ý của bạn. Bạn có thể giải thích thêm về API này không ạ?
 
Upvote 0
Web KT

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

Back
Top Bottom