Trước hết, tôi muốn giới thiệu "nguồn gốc" của "ma trận vuông" về km giữa các điểm đó là: tôi thấy nó khắp nơi ở trên Google. Bạn có thể search với cú pháp "khoảng cách giữa các tỉnh ở Việt Nam", ngay lặp tức có đến 30,700,000 kết quả chỉ trong 0.66 giây! Bạn thật may mắn vì nó có sẵn, vậy chỉ cần dùng thôi chứ viết công cụ làm gì nhỉ?
Thực tế không phải như vậy, tôi mời bạn xem 1 bản có sẵn trên mạng như sau:
Bạn sẽ thấy thật dễ dàng để tra cứu, nhưng để tìm file excel gốc của hình trên cũng không phải dễ dàng. May mắn thay, tôi có sẵn nếu bạn cần hãy liên hệ nhé!
Opps! Nhưng tôi đang nói rằng nó (bảng km nêu trên) không chính xác mà! Vì sao vậy? Với bản trên, tôi đoán chừng tác giả đã lấy Tp HCM làm chuẩn, sau đó từ Tp HCM tính số km đến các tỉnh, rồi dùng công thức excel để nội suy các ô còn lại (một phương pháp rất thông minh và tiết kiệm thời gian). Tuy nhiên, hoàn toàn sai! Vì theo logic này thì các tỉnh sẽ sắp xếp thẳng hàng trong khi nước ta là hình chữ S (mà thực ra hiếm có nước nào mà các tỉnh sẽ "thẳng băng" như vậy cả! Hơn nữa số km cũng không chính xác vì chỉ tính đến "rìa" của tỉnh (ví dụ Biên Hòa đi HCM mà chỉ có 22km). Nếu bạn có trong tay file excel này, bạn dò thử từ Binh Dương đi Đồng Nai bạn sẽ thấy thú vị vi nó cực kỳ gần nhau (thậm chí nó sẽ bằng zero vì 2 tỉnh này theo vị trí đang tạo ra 1 hình tam giác cân với Tp HCM).
Tôi sẽ không dùng bảng nêu trên mà dùng hàm API để tính các điểm bên trong bảng đó, lúc này sẽ đảm bảo sự chính xác (như đã nói ở chủ đề "Tính quãng đường vận chuyển bằng hàm API của Google Map").
Tiếp theo là làm sao tôi có thể truy vấn ra nhanh nhất số km của 2 điểm tương quan trên "ma trận vuông" này? Thực ra có rất nhiều cách, ở bài này tôi hướng dẫn bạn 1 cách đơn giản nhất đó là dùng hàm Offset kết hợp với hàm Match (bạn có thể tìm trên Google về công dụng của 2 hàm này nhé).
Ví dụ ta có ma trận như sau:
Cột A: chứa thông tin liên quan tên của từng vị trí vận chuyển (thường trong Logistics sẽ là Sold_to hoặc Ship_to): ABC, DEF và XYZ (dĩ nhiên là còn nhiều nữa nhé).
Cột B: chứa thông tin địa chỉ của từng điểm
Dòng 1: chứa thông tin liên quan tên của từng vị trí vận chuyển (thường trong Logistics sẽ là Sold_to hoặc Ship_to): ABC, DEF và XYZ (dĩ nhiên là còn nhiều nữa nhé).
Dòng 2: chứa thông tin địa chỉ của từng điểm
Nhiệm vụ là ta sẽ input vào 2 ô với thông số của 2 điểm giao và hàm Offet + Match sẽ cho chúng ta 1 giao điểm giữa cột và dòng, đó chính là số km giữa 2 điểm đó.
Ta xét công thức tại ô D75 như hình bên dưới. Hàm Offet sẽ lấy ô tham chiếu là ô có chưa số km đầu tiên của ma trận vuông (ô C3) và ô này sẽ dịch chuyển theo chiều dọc (rows) và chiều ngang (cols) ứng với thông số được tính toán bởi hàm Match.
Và kết quả của hàm này sẽ là "41.125" đó chính là giao điểm của dòng 3 và cột E.
Nếu bạn có 1 ma trận rất lớn (như ma trận tôi đã tạo cho toàn thể các quận, huyện của Việt Nam (lên đến hơn 640k điểm) thì để truy xuất nhanh bạn cần học thêm VBA để tạo ra mảng dữ liệu (phần chuyên sâu này tôi hẹn bạn ở 1 topic khác nhé).
Chúc các bạn thành công!