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