Xin hỏi về vấn đề làm tròn (1 người xem)

  • Thread starter Thread starter quy le
  • Ngày gửi Ngày gửi

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

quy le

Thành viên mới
Tham gia
14/11/13
Bài viết
6
Được thích
0
Em có một cột như sau:


7zVBFdY.png



Ví dụ như em có một món đồ nặng tầm 320 gram thì em mún làm tròn ô khối lượng của nó lên 500 gram
và tương tự nếu một món 2150 gram chẳng hạn thì làm tròn lên 2500 gram


không biết có cách nào để làm tròn giá trị theo cột đã cho không ạ?
 
Em có một cột như sau:
Ví dụ như em có một món đồ nặng tầm 320 gram thì em mún làm tròn ô khối lượng của nó lên 500 gram
và tương tự nếu một món 2150 gram chẳng hạn thì làm tròn lên 2500 gram
không biết có cách nào để làm tròn giá trị theo cột đã cho không ạ?
Bạn dùng hàm CEILING, ví dụ số là A1, B1 bạn gõ công thức:
Mã:
=CEILING(A1,500)
 
Em muốn sử dụng cái khung đó để làm một bảng giá trị dò tìm loại như vlookup ấy ạ

5TcvawW.png


Khi em nhập vào cột khối lượng thì bên cột tiền ship sẽ lấy số tiền ứng với giá trị khối lượng được làm tròn lên

Vì theo bưu điện nếu đơn hàng nặng 2100 gram thì sẽ tốn phí ship của hàng nặng 2500 gram


Với khối lượng 2klg trở lên thì sẽ xài đc CEILING nhưng mấy cái dưới khó lắm ạ
 
Chỉnh sửa lần cuối bởi điều hành viên:
Em muốn sử dụng cái khung đó để làm một bảng giá trị dò tìm loại như vlookup ấy ạ

5TcvawW.png


Khi em nhập vào cột khối lượng thì bên cột tiền ship sẽ lấy số tiền ứng với giá trị khối lượng được làm tròn lên

Vì theo bưu điện nếu đơn hàng nặng 2100 gram thì sẽ tốn phí ship của hàng nặng 2500 gram


Với khối lượng 2klg trở lên thì sẽ xài đc CEILING nhưng mấy cái dưới khó lắm ạ

Bạn đưa file lên mới biết cái khó chỗ nào chứ đoán mò làm sao ra.
 
đúng rồi đấy anh lecongtoan :D
 
Bạn sửa lại công thức ô F2 thành =IF(ISNA(MATCH(D2;$A$2:$A$16;0));INDEX($A$2:$A$16;MATCH(D2;$A$2:$A$16;1)+1);D2). Kết quả sẽ chuẩn hơn
 
Sửa lại công thức như anh nói thì hiện lỗi
zZBmRZw.png


Anh xem lại rồi giải thích giúp em công thức trên được không ạ :)
 
Vẫn vậy anh ơi, thôi em xài cái cũ cũng được :D
 
Công thức này:
=IF(COUNTIF($A$2:$A$16,D2),D2,INDEX($A$2:$A$16,MATCH(D2,$A$2:$A$16,1)+1))
Và công thức này:
=IF(ISNA(MATCH(D2,$A$2:$A$16,0)),INDEX($A$2:$A$16,MATCH(D2,$A$2:$A$16,1)+1),D2)
Đều phải duyệt mảng 2 lần

Nếu bạn đem số trừ đi một trị rất nhỏ (0.001 chẳng hạn) thì chỉ phải duyệt mảng 1 lần.
=INDEX($A$2:$A$16,MATCH(D2-0.001,$A$2:$A$16,1)+1)

Đây chỉ là đại khái ý tưởng thôi. Chuyện bắt lỗi này nọ thì tuỳ trường hợp dữ liệu của bạn mà thêm bớt (IFERROR chẳng hạn).
 
Giả sử các mốc giá trị nhập vào A2-A15, và giá trị thử nghiệm nhập vào cột D từ D2

Không biết có cái bẫy nào không mà không thấy ai đưa ra công thức

Mã:
=INDEX($A$2:$A$15;COUNTIF($A$2:$A$15;"<"&$D2)+1)

Tất nhiên nếu D2 lớn hơn giá trị lớn nhất (1400) thì kết quả trả về là #REF!. Kết quả đúng thôi vì bản thân chủ chủ đề cũng không tự xác định, khi đó sẽ trả về cái gì. Trả về lỗi là lô gíc, dấu hiệu là giá trị vượt quá phạm vi cho phép.
 
Công thức này:
=IF(COUNTIF($A$2:$A$16,D2),D2,INDEX($A$2:$A$16,MATCH(D2,$A$2:$A$16,1)+1))
Và công thức này:
=IF(ISNA(MATCH(D2,$A$2:$A$16,0)),INDEX($A$2:$A$16,MATCH(D2,$A$2:$A$16,1)+1),D2)
Đều phải duyệt mảng 2 lần
Nếu bạn đem số trừ đi một trị rất nhỏ (0.001 chẳng hạn) thì chỉ phải duyệt mảng 1 lần.
=INDEX($A$2:$A$16,MATCH(D2-0.001,$A$2:$A$16,1)+1)
Đây chỉ là đại khái ý tưởng thôi. Chuyện bắt lỗi này nọ thì tuỳ trường hợp dữ liệu của bạn mà thêm bớt (IFERROR chẳng hạn).
Công thức rút gọn:
=INDEX($A$2:$A$16, MATCH(D2,$A$2:$A$16,-1))
Với điều kiện bảng dò được sắp xếp từ LỚN xuống NHỎ (Bác Bill đã hỗ trợ trường hợp này)
 

File đính kèm

Giả sử các mốc giá trị nhập vào A2-A15, và giá trị thử nghiệm nhập vào cột D từ D2

Không biết có cái bẫy nào không mà không thấy ai đưa ra công thức

Mã:
=INDEX($A$2:$A$15;COUNTIF($A$2:$A$15;"<"&$D2)+1)

Tất nhiên nếu D2 lớn hơn giá trị lớn nhất (1400) thì kết quả trả về là #REF!. Kết quả đúng thôi vì bản thân chủ chủ đề cũng không tự xác định, khi đó sẽ trả về cái gì. Trả về lỗi là lô gíc, dấu hiệu là giá trị vượt quá phạm vi cho phép.

(1) Chả có bẫy nào cả. Vấn đề tương đối giản dị, miễn đừng phải duyệt mảng nhiều lần thì phép nào cũng gần như nhau.

Theo tôi thì dùng Match khi có trị 0 ở đầu mảng và Countif khi không có.

(2) Chính vì cần cái #REF! cho nên mới phải giải quyết chiếu trệch (offset) bằng cách +1
nếu không thì ta đã dùng INDEX($A3:$A16...... cho nó gọn
 
Lần chỉnh sửa cuối:
(1) Chả có bẫy nào cả. Vấn đề tương đối giản dị, miễn đừng phải duyệt mảng nhiều lần thì phép nào cũng gần như nhau.

Câu "Không biết có cái bẫy nào không mà không thấy ai đưa ra công thức" thuộc loại "câu hỏi tu từ" thôi.
 

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

Back
Top Bottom