Tìm kiếm giá cước theo khối lượng và tuyến đường vận chuyển hàng hóa

Liên hệ QC

rosenrick2020

Thành viên mới
Tham gia
25/5/20
Bài viết
10
Được thích
9
Dear anh/chị/em/bạn,
Mình có gặp vấn đề mà không tài nào giải quyết nổi, nhờ các pro trên diễn đàn xem qua giúp với. Mình làm bên phân phối hàng, mình cần dò tìm giá cước cho từng đơn hàng theo khối lượng hàng vận chuyển và tuyến đường vận chuyển để xem tổng kinh phí là bao nhiêu. Mình có đính kèm file lên, cả nhà xem giúp mình với. Xin chân thành cảm ơn!
 

File đính kèm

Của bạn có thể dùng VBA, hoặc bạn phải mã hóa cái điều kiện khối lượng thì công việc mới nhẹ nhàng được.
 
View attachment 237997
Bạn sửa lại bảng như này sau đó dùng công thức Vlookup, kết hợp với hàm Match để tra dữ liệu nhé.
Bác ơi, bác có thể cho em xin công thức được không bác? Vì em không hình dung ra được là dùng vlookup kết hợp với match như thế nào để xử lý cả @@, em kém lắm @@ Cảm ơn bác vì đã dành thời gian, em vật vã mãi vẫn chưa giải quyế được bảng này một cách đỡ mệt mỏi nhất @@, mò mãi vãn sai @@
 
Ai giúp với ạ, thực sự em không giải quyết nổi bài này @@
Bạn nên làm theo hướng dẫn của bạn @n0thing1988.

Thử:
Mã:
D2=SUMPRODUCT(HLOOKUP(C2,'Bảng Giá Cước'!$C$2:$H$13,IF({1,0},MATCH(B2/1000,'Bảng Giá Cước'!$B$2:$B$12),12),)*IF({1,0},1,MAX(B2/1000-3.5,)*2))
Enter, fill xuống.

Thân
 

File đính kèm

Cái bảng giá cước của bạn đẹp thiệt, nhưng nếu chỉnh sửa lại chút, theo mình sẽ dễ trong tra cứu hơn:
1./ Tách cột [KG (x)] ra làm 2 (min & Max)
2./ Mã hóa các tuyến (để tránh nsai chính tả khi nhập) hay xài ComboBox để nhập liệu về 'tuyến'

Thân!
 
Bạn nên làm theo hướng dẫn của bạn @n0thing1988.

Thử:
Mã:
D2=SUMPRODUCT(HLOOKUP(C2,'Bảng Giá Cước'!$C$2:$H$13,IF({1,0},MATCH(B2/1000,'Bảng Giá Cước'!$B$2:$B$12),12),)*IF({1,0},1,MAX(B2/1000-3.5,)*2))
Enter, fill xuống.

Thân

Cảm ơn bạn đã dành thời gian giúp đỡ, mình đã thử hàm của bạn thì mình thấy một số kết quả ra sai. Ví dụ như mã hàng 5111 có khối lượng là 400gr Tuyến liên vùng đặc biệt. Mình tra theo bảng là 22,500 nhưng kết quả lại ra là 21,000. @@ Bài này mình vật vã 2 ngày rồi mò lên mò xuống mà viết hàm có chỗ đúng có chỗ sai @@ Bạn có thể xem lại giúp mình được không? Mình cảm ơn nhiều lắm @@
Bài đã được tự động gộp:

Cái bảng giá cước của bạn đẹp thiệt, nhưng nếu chỉnh sửa lại chút, theo mình sẽ dễ trong tra cứu hơn:
1./ Tách cột [KG (x)] ra làm 2 (min & Max)
2./ Mã hóa các tuyến (để tránh nsai chính tả khi nhập) hay xài ComboBox để nhập liệu về 'tuyến'

Thân!
Bạn ơi, bạn có thể hướng dẫn cụ thể được không? Tách cột KG ra min max thì mình oke rồi nhưng còn mã hóa các tuyến và & combobox thì mình chịu @@
 
Cảm ơn bạn đã dành thời gian giúp đỡ, mình đã thử hàm của bạn thì mình thấy một số kết quả ra sai. Ví dụ như mã hàng 5111 có khối lượng là 400gr Tuyến liên vùng đặc biệt. Mình tra theo bảng là 22,500 nhưng kết quả lại ra là 21,000. @@ Bài này mình vật vã 2 ngày rồi mò lên mò xuống mà viết hàm có chỗ đúng có chỗ sai @@ Bạn có thể xem lại giúp mình được không? Mình cảm ơn nhiều lắm @@
Điều chỉnh lại các mốc như file đính kèm.

Thân
 

File đính kèm

Bạn ơi, bạn có thể hướng dẫn cụ thể được không? Tách cột KG ra thì mình oke rồi nhưng còn mã hóa các tuyến và & combobox thì mình chịu

Ví dụ:

Tuyến
LVLiên Vùng
LDLiên Vùng đặc biệt
NTNội Tỉnh
NVNội Vùng
:D & chúc thành công!
 
Điều chỉnh lại các mốc như file đính kèm.

Thân

Cảm ơn bác nhiều vì đã giúp em, nhưng tại em kém quá nên xem file của bác xong có 1 số vấn đề em muốn hỏi bác để em học hỏi tư duy của bác :):
1-Tại sao ở bảng giá cước bác tạo cột Kg lại cộng thêm 0.001 vào số Min của mỗi dòng?
2-Đơn hàng 7053, em tính thử bằng tay thì nó lại ra 1,129,000 cơ, em tính theo kiểu là khối lượng hàng lớn hơn 3.5kg thì cứ 1 khoảng 0<x<=0.5kg thì lại tính theo giá tuyến Liên vùng là 8500 chứ không phải cứ đủ 0.5kg thì mới được. Em mò mẫm mãi từ chiều vẫn chưa chỉnh được hàm của bác. Bác có thể kiểm tra lại giúp em được không? Nếu em tính sai thì thành thật xin lỗi bác.
3-Em cũng gà excel lắm, bác có thể giải thích cho em IF({1,0} nghĩa là gì được không?
Cảm ơn bác nhiều
 
1-Tại sao ở bảng giá cước bác tạo cột Kg lại cộng thêm 0.001 vào số Min của mỗi dòng?
2-Đơn hàng 7053, em tính thử bằng tay thì nó lại ra 1,129,000 cơ, em tính theo kiểu là khối lượng hàng lớn hơn 3.5kg thì cứ 1 khoảng 0<x<=0.5kg thì lại tính theo giá tuyến Liên vùng là 8500 chứ không phải cứ đủ 0.5kg thì mới được. Em mò mẫm mãi từ chiều vẫn chưa chỉnh được hàm của bác. Bác có thể kiểm tra lại giúp em được không? Nếu em tính sai thì thành thật xin lỗi bác.
3-Em cũng gà excel lắm, bác có thể giải thích cho em IF({1,0} nghĩa là gì được không?
Cảm ơn bác nhiều
1-Tại sao ở bảng giá cước bác tạo cột Kg lại cộng thêm 0.001 vào số Min của mỗi dòng?
Dùng hàm: MATCH(B2/1000,'Bảng Giá Cước'!$B$2:$B$12 ) hay tương đương => MATCH(B2/1000,'Bảng Giá Cước'!$B$2:$B$12,1) để so khớp 'giá trị trong khoảng' theo như yêu cầu của bạn:​
a/ 0<x<=0.05 --> x>0: tôi chỉ lấy cận dưới, cộng thêm giá trị 0.001 => 1 gram thì thỏa x>0​
b/ 0.05<x<=0.1 --> x>0.050: chỉ lấy cận dưới, cộng thêm giá trị 0.001 => 0.051 gram thì thỏa x>0.050​
....Tương tự cho các mốc còn lại.​
Với các mốc đã chỉnh thêm 0.001 thì 'Bảng Giá Cước'!$B$2:$B$12 sẽ tạo thành giá trị so khớp như sau:​
{0.001; 0.051; 0.101; 0.251; 0.501;1.001; 1.501; 2.001; 2.501; 3.001}​
Với đối số 1 trong lệnh của hàm Match(,,1) nó sẽ tìm giá trị của 'khối lượng tính cước' thuộc trong các khoảng nào của Vùng trên: Ví dụ: mã 1993 có khối lượng 1.5kg, khi thực hiện nó sẽ tìm thấy thuộc khoảng từ bằng 1.001 đến dưới 1.501 (tức 1.001<=x<1.501 hay tương đương với yêu cầu của bạn: 1.0<x<=1.5). Ở đây, tôi coi giá trị 1 gram là đơn vị tối thiểu trong tính toán cho việc cân hàng để gửi đi.​

2-Đơn hàng 7053, em tính thử bằng tay thì nó lại ra 1,129,000 cơ, em tính theo kiểu là khối lượng hàng lớn hơn 3.5kg thì cứ 1 khoảng 0<x<=0.5kg thì lại tính theo giá tuyến Liên vùng là 8500 chứ không phải cứ đủ 0.5kg thì mới được. Em mò mẫm mãi từ chiều vẫn chưa chỉnh được hàm của bác. Bác có thể kiểm tra lại giúp em được không? Nếu em tính sai thì thành thật xin lỗi bác.
Do bạn không nói rõ ngay từ đầu, hoặc chú thích điều kiện trong 'Bảng tính cước', chỉ ghi "0.5Kg tiếp theo".​
Muốn vậy thì điều chỉnh công thức: MAX( B2/1000-3.5, )*2 thành MAX( CEILING(B2/1000-3.5,0.5),)*2​

3-Em cũng gà excel lắm, bác có thể giải thích cho em IF({1,0} nghĩa là gì được không?
Hai công thức:​
  • IF({1,0},MATCH(B2/1000,'Bảng Giá Cước'!$B$2:$B$12),12) hoặc
  • IF({1,0},1,MAX(CEILING(B2/1000-3.5,0.5),)*2)
Là dạng thức tạo lập 'Mảng 1 chiều' bằng cách ghép các giá trị đơn lẻ vào với nhau. Với mảng {1,0} nằm trong đối số 'điều kiện thỏa' của hàm IF('điều kiện',,) thì nó sẽ lấy cả hai giá trị: thỏa điều kiện --> 'TRUE' (tức giá trị 1), và không thỏa điều kiện-->'FALSE' (tức giá trị 0). Ví dụ: với công thức IF({1,0},MATCH(B2/1000,'Bảng Giá Cước'!$B$2:$B$12),12) thì nó ghép các giá trị đơn lẻ tìm được bởi:​
  • Hàm MATCH(B2/1000,'Bảng Giá Cước'!$B$2:$B$12) --> giá trị dòng trả về khi so khớp 'khối lượng tình cước' với Vùng dò như đã nêu tại "1/" ở trên. Bạn sẽ thấy rằng đây là giá trị động tùy biến theo 'khối lượng tình cước'. Giả sử nó trả về kết quả là: 11 (tức đã so khớp và tìm thấy thuộc giá trị trong khoảng tại dòng số 11).
  • Và giá trị: 12 --> Giá trị cố định dòng số 12 (tức dòng bạn ghi "0.5Kg tiếp theo").
  • Hàm IF({1,0}, 11, 12) sẽ tạo thành mảng --> {11,12} tức giá trị báo cho hàm HLOOKUP() cần lấy ra giá trị trong 'Bảng tính cước'.
Thân
 

File đính kèm

1-Tại sao ở bảng giá cước bác tạo cột Kg lại cộng thêm 0.001 vào số Min của mỗi dòng?
Dùng hàm: MATCH(B2/1000,'Bảng Giá Cước'!$B$2:$B$12 ) hay tương đương => MATCH(B2/1000,'Bảng Giá Cước'!$B$2:$B$12,1) để so khớp 'giá trị trong khoảng' theo như yêu cầu của bạn:​
a/ 0<x<=0.05 --> x>0: tôi chỉ lấy cận dưới, cộng thêm giá trị 0.001 => 1 gram thì thỏa x>0​
b/ 0.05<x<=0.1 --> x>0.050: chỉ lấy cận dưới, cộng thêm giá trị 0.001 => 0.051 gram thì thỏa x>0.050​
....Tương tự cho các mốc còn lại.​
Với các mốc đã chỉnh thêm 0.001 thì 'Bảng Giá Cước'!$B$2:$B$12 sẽ tạo thành giá trị so khớp như sau:​
{0.001; 0.051; 0.101; 0.251; 0.501;1.001; 1.501; 2.001; 2.501; 3.001}​
Với đối số 1 trong lệnh của hàm Match(,,1) nó sẽ tìm giá trị của 'khối lượng tính cước' thuộc trong các khoảng nào của Vùng trên: Ví dụ: mã 1993 có khối lượng 1.5kg, khi thực hiện nó sẽ tìm thấy thuộc khoảng từ bằng 1.001 đến dưới 1.501 (tức 1.001<=x<1.501 hay tương đương với yêu cầu của bạn: 1.0<x<=1.5). Ở đây, tôi coi giá trị 1 gram là đơn vị tối thiểu trong tính toán cho việc cân hàng để gửi đi.​

2-Đơn hàng 7053, em tính thử bằng tay thì nó lại ra 1,129,000 cơ, em tính theo kiểu là khối lượng hàng lớn hơn 3.5kg thì cứ 1 khoảng 0<x<=0.5kg thì lại tính theo giá tuyến Liên vùng là 8500 chứ không phải cứ đủ 0.5kg thì mới được. Em mò mẫm mãi từ chiều vẫn chưa chỉnh được hàm của bác. Bác có thể kiểm tra lại giúp em được không? Nếu em tính sai thì thành thật xin lỗi bác.
Do bạn không nói rõ ngay từ đầu, hoặc chú thích điều kiện trong 'Bảng tính cước', chỉ ghi "0.5Kg tiếp theo".​
Muốn vậy thì điều chỉnh công thức: MAX( B2/1000-3.5, )*2 thành MAX( CEILING(B2/1000-3.5,0.5),)*2​

3-Em cũng gà excel lắm, bác có thể giải thích cho em IF({1,0} nghĩa là gì được không?
Hai công thức:​
  • IF({1,0},MATCH(B2/1000,'Bảng Giá Cước'!$B$2:$B$12),12) hoặc
  • IF({1,0},1,MAX(CEILING(B2/1000-3.5,0.5),)*2)
Là dạng thức tạo lập 'Mảng 1 chiều' bằng cách ghép các giá trị đơn lẻ vào với nhau. Với mảng {1,0} nằm trong đối số 'điều kiện thỏa' của hàm IF('điều kiện',,) thì nó sẽ lấy cả hai giá trị: thỏa điều kiện --> 'TRUE' (tức giá trị 1), và không thỏa điều kiện-->'FALSE' (tức giá trị 0). Ví dụ: với công thức IF({1,0},MATCH(B2/1000,'Bảng Giá Cước'!$B$2:$B$12),12) thì nó ghép các giá trị đơn lẻ tìm được bởi:​
  • Hàm MATCH(B2/1000,'Bảng Giá Cước'!$B$2:$B$12) --> giá trị dòng trả về khi so khớp 'khối lượng tình cước' với Vùng dò như đã nêu tại "1/" ở trên. Bạn sẽ thấy rằng đây là giá trị động tùy biến theo 'khối lượng tình cước'. Giả sử nó trả về kết quả là: 11 (tức đã so khớp và tìm thấy thuộc giá trị trong khoảng tại dòng số 11).
  • Và giá trị: 12 --> Giá trị cố định dòng số 12 (tức dòng bạn ghi "0.5Kg tiếp theo").
  • Hàm IF({1,0}, 11, 12) sẽ tạo thành mảng --> {11,12} tức giá trị báo cho hàm HLOOKUP() cần lấy ra giá trị trong 'Bảng tính cước'.
Thân
Cảm ơn bác Hiệp nhiều lắm ạ, vấn đề của em đã được giải quyết rồi ạ, nếu có chỗ nào chưa hiểu trong công thức em rất mong bác Hiệp sẽ tiếp tục giúp đỡ em, cảm ơn bác nhiều lắm. Em vật vã mấy ngày hôm nay vì cái bài tính này rồi
 
Web KT

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

Back
Top Bottom