[Giúp] VBA so sánh hai chuỗi GPS và lấy GPS đúng nhất (1 người xem)

Liên hệ QC

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

ngoctuyen1995

Thành viên hoạt động
Tham gia
25/4/17
Bài viết
196
Được thích
19
Giới tính
Nữ
Thân chào cả nhà GPEX..!
Hiện tại em đang gặp một vấn đề mong cả nhà giúp em giải quyết ạ...!
Em có một sheet Data bao gồm các cột GPS_1, GPS_2 và cột Kết quả...
Công việc của em là so sánh cột GPS_1 với GPS_2 và tìm ra giá trị gần đúng nhất..
ví dụ:
- Cột GPS_1: 20.99115325;105.83956264;4;gps
- Cột GPS_2: 20.99116252;105.83946712;3;gps
thì cột Kết quả sẽ là: 20.99116252;105.83946712;3;gps.. Kết quả này là dựa vào con số cuối cùng (tính dấu ; thứ nhất từ Phải qua, em đã bôi đậm ), so sánh giữa 02 cột, nếu giá trị nào nhỏ hơn thì sẽ lấy GPS của cột đó..
- Trường hợp cuối chuỗi có xuất hiện chữ Network hoặc Fused thì sẽ ưu tiên lấy chuỗi có chữ GPS cuối cùng mà không cần phải so sánh ạ..
Em có đính kèm file và làm kết quả ạ...

Mong cả nhà giúp đỡ, em chân thành cảm ơn ạ..!
 

File đính kèm

Thân chào cả nhà GPEX..!
Hiện tại em đang gặp một vấn đề mong cả nhà giúp em giải quyết ạ...!
Em có một sheet Data bao gồm các cột GPS_1, GPS_2 và cột Kết quả...
Công việc của em là so sánh cột GPS_1 với GPS_2 và tìm ra giá trị gần đúng nhất..
ví dụ:
- Cột GPS_1: 20.99115325;105.83956264;4;gps
- Cột GPS_2: 20.99116252;105.83946712;3;gps
thì cột Kết quả sẽ là: 20.99116252;105.83946712;3;gps.. Kết quả này là dựa vào con số cuối cùng (tính dấu ; thứ nhất từ Phải qua, em đã bôi đậm ), so sánh giữa 02 cột, nếu giá trị nào nhỏ hơn thì sẽ lấy GPS của cột đó..
- Trường hợp cuối chuỗi có xuất hiện chữ Network hoặc Fused thì sẽ ưu tiên lấy chuỗi có chữ GPS cuối cùng mà không cần phải so sánh ạ..
Em có đính kèm file và làm kết quả ạ...

Mong cả nhà giúp đỡ, em chân thành cảm ơn ạ..!
Mã:
D2 =IF(LEFT(RIGHT(SUBSTITUTE(B2,";",REPT(" ",10)),20),10)-LEFT(RIGHT(SUBSTITUTE(C2,";",REPT(" ",10)),20),10)>=0,C2,B2)
 
Upvote 0
Mã:
D2 =IF(LEFT(RIGHT(SUBSTITUTE(B2,";",REPT(" ",10)),20),10)-LEFT(RIGHT(SUBSTITUTE(C2,";",REPT(" ",10)),20),10)>=0,C2,B2)
Em cảm ơn Thầy đã giúp đỡ em ạ... hàm chạy tốt nhưng bị một số lỗi em quên nói ạ..
- Trường hợp cuối chuỗi có xuất hiện chữ Network hoặc Fused thì sẽ ưu tiên lấy chuỗi có chữ GPS cuối cùng mà không cần phải so sánh ạ.. (cái này thì hàm vẫn không thấy được ạ : vd: GPS 1: 19.81259612;105.77401953;20;fused, GPS 2: 19.81272801;105.77426299;70;gps, thì kết quả của hàm lại lấy 19.81259612;105.77401953;20;fused (kết quả này không đúng)..)
- Trường hợp một trong 02 GPS bị blank thì nó sẽ ra kết quả #VALUE (em muốn nếu 01 trong 02 cột nếu có thì sẽ lấy cột GPS đó)

Mong Thầy giúp đỡ ạ..!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Em cảm ơn Thầy đã giúp đỡ em ạ... hàm chạy tốt nhưng bị một số lỗi em quên nói ạ..
- Trường hợp cuối chuỗi có xuất hiện chữ Network hoặc Fused thì sẽ ưu tiên lấy chuỗi có chữ GPS cuối cùng mà không cần phải so sánh ạ.. (cái này thì hàm vẫn không thấy được ạ : vd: GPS 1: 19.81259612;105.77401953;20;fused, GPS 2: 19.81272801;105.77426299;70;gps, thì kết quả của hàm lại lấy 19.81259612;105.77401953;20;fused (kết quả này không đúng)..)
- Trường hợp một trong 02 GPS bị blank thì nó sẽ ra kết quả #VALUE (em muốn nếu 01 trong 02 cột nếu có thì sẽ lấy cột GPS đó)

Mong Thầy giúp đỡ ạ..!
Mã:
D2 =IF(IFERROR(--LEFT(RIGHT(SUBSTITUTE(B2,";",REPT(" ",10)),20),10),10^10)+COUNTIF(C2,"*s")*10^10>=IFERROR(--LEFT(RIGHT(SUBSTITUTE(C2,";",REPT(" ",10)),20),10),10^10)+COUNTIF(B2,"*s")*10^10,C2,B2)
Dòng 8 và dòng 17 xử như thế nào?
 
Upvote 0
Thân chào cả nhà GPEX..!
Hiện tại em đang gặp một vấn đề mong cả nhà giúp em giải quyết ạ...!
Em có một sheet Data bao gồm các cột GPS_1, GPS_2 và cột Kết quả...
Công việc của em là so sánh cột GPS_1 với GPS_2 và tìm ra giá trị gần đúng nhất..
ví dụ:
- Cột GPS_1: 20.99115325;105.83956264;4;gps
- Cột GPS_2: 20.99116252;105.83946712;3;gps
thì cột Kết quả sẽ là: 20.99116252;105.83946712;3;gps.. Kết quả này là dựa vào con số cuối cùng (tính dấu ; thứ nhất từ Phải qua, em đã bôi đậm ), so sánh giữa 02 cột, nếu giá trị nào nhỏ hơn thì sẽ lấy GPS của cột đó..
- Trường hợp cuối chuỗi có xuất hiện chữ Network hoặc Fused thì sẽ ưu tiên lấy chuỗi có chữ GPS cuối cùng mà không cần phải so sánh ạ..
Em có đính kèm file và làm kết quả ạ...

Mong cả nhà giúp đỡ, em chân thành cảm ơn ạ..!
Góp vui chung với bạn hiền bằng công thức mảng. :)
Bạn chủ thớt tìm hiểu công thức với giải pháp: Do tôi phân tích đặc thù dãy số của bạn đưa, tôi thắc mắc: trong trường hợp hai số cần so bằng nhau thì bạn sẽ xử lý ra sao!? Thấy rằng bạn yêu cầu so số cuối (vị trí thứ 3 cũa dãy phân cách ";") đó là do các số trên của dãy gần gần bằng nhau, hơn thua nhau ở số lẻ, cho nên chỉ cần hơn thua nhau 1 đơn vị khi so hai vị trí số cuối này thì sẽ lấy kết quả giá trị số nhỏ. Vì vậy, tôi gợi ý:
  • Cộng cả ba số của từng GPS (phân cách bằng ";") lại với nhau, rồi so sánh với GPS kia số nào nhỏ hơn thì lấy làm kết quả sau cùng;
    • Vd: Dòng 10--> GPS1=19.83618721+105.77155507+3 = 128.60774228 ; GPS2=19.83619031+105.77157063+3 = 128.60776094 --> GPS1<GPS2--> kết quả GPS1
  • Đồng thời chỉ chọn lấy giá trị nào có "gps" cuối;
  • Báo lỗi khi không thỏa các điều kiện trên.
PHP:
=IF(AND(RIGHT(B2:C2,3)="gps"),IF(SUM(IFERROR(MID(SUBSTITUTE(B2:C2,";",REPT(" ",50)),(ROW($1:$10)-1)*50+1,50)*{1,-1},0))>0,C2,B2),LOOKUP(2,1/FIND("gps",B2:C2),B2:C2))
Ctrl+Shift+Enter, rồi fill xuống
Nếu không đúng ý của bạn chủ thớt, thì coi như một trao đổi tham khảo thêm cho vui.

Chúc anh em ngày thiệt vui.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom