Tìm hiểu về vấn đề làm tròn số trong Excel
Excel có nhiều hàm dùng để làm tròn số. Mỗi hàm có một chức năng riêng.
Bài này xin nêu ra những cái khác nhau và giống nhau giữa các hàm:
ROUND(), ROUNDUP(), ROUNDDOWN(), MROUND(), CEILING(), FLOOR(), EVEN(), ODD(), INT() và TRUNC()
multiple: Con số mà bạn cần làm tròn number đến bội số của nó
- Nếu number và multiple khác dấu, hàm sẽ báo lỗi #NUM! - Nếu number và multiple bằng nhau, kết quả là chính số đó - MROUND() sẽ làm tròn lên, nếu phần chia của phép chia number cho multiple lớn hơn hoặc bằng 1/2 multiple, và làm tròn xuống nếu phần chia của phép chia number cho multiple nhỏ hơn 1/2 multiple
Ví dụ:
MROUND(5, 2) = 6 (do 5/2 > 2/2, bội số của 2 gần nhất mà lớn hơn 5 là 6) MROUND(11, 5) = 10 (do 11/5 < 5/2, bội số của 5 gần nhất mà nhỏ hơn 11 là 10) MROUND(13, 5) = 15 (do 13/5 > 5/2, bội số của 5 gần nhất mà lớn hơn 13 là 15) MROUND(5, 5) = 5 (number và multiple bằng nhau) MROUND(7.31, 0.5) = 7.5 (do 7.31/0.5 > 0.5/2, bội số của 0.5 gần nhất mà lớn hơn 7.31 là 7.5) MROUND(-11, -5) = -10 (do -11/-5 > -5/2, bội số của -5 gần nhất mà lớn hơn -11 là -10) MROUND(-11, 5) = #NUM! (number và multiple khác dấu)
Hai hàm này, về cơ bản thì giống hàm ROUND(), chỉ khác là chúng chỉ làm tròn theo một chiều: ROUNDDONW() luôn luôn làm tròn một số về số 0, còn ROUNDUP() thì luôn luôn làm tròn một số ra xa số 0.
Hai hàm này, hao hao giống hàm MROUND(), là làm tròn đến bội số gần nhất của một số được chỉ định, chỉ khác đôi chút về cách tính: CEILING() luôn luôn làm tròn một số ra xa số 0, còn FLOOR() làm tròn về số 0.
Hai hàm này làm tròn rất đơn giản. EVEN() làm tròn đến số nguyên chẵn gần nhất, còn ODD() làm tròn đến số nguyên lẻ gần nhất. Cả hai đều làm tròn theo kiểu chạy xa khỏi số 0.
num_digits: Là một số nguyên, chỉ cách mà bạn muốn cắt bớt số
num_digits > 0 : nếu number là một số thập phân, thì num_digits chỉ ra số con số thập phân mà bạn muốn giữ lại (sau dấu phẩy)
num_digits = 0 hoặc không nhập: cắt bỏ hết phần thập phân của number (nếu có)
num_digits < 0 : làm tròn number thành một số nguyên và làm tròn numbersang trái thành một bội số của 10 (xem thêm ở ví dụ)
Hàm INT() làm tròn một số tới số nguyên gần nhất
Đối với số dương, hàm INT() và TRUNC() cho kết quả giống nhau (num_digits của TRUNC() = 0 hoặc không có), nhưng đối với số âm thì hai hàm này sẽ cho kết quả hoàn toàn khác nhau.
Ví dụ:
INT( 123.456) = 123 | TRUNC( 123.456) = 123
INT(-123.456) = -124 | TRUNC(-123.456) = -123
Khi num_digits khác 0, TRUNC() khác hẳn với ROUND() ở chỗ: ROUND() thì làm tròn, còn TRUNC() chỉ cắt bỏ bớt số chứ không làm tròn.
Trong một cột dữ liệu, người ta muốn tính tổng của cách ô cách nhau mỗi n hàng nào đó.
Ví dụ, trong dãy A1:A20, tính tổng của các ô cách nhau 5 ô, nghĩa là lấy A1 + A6 + A11 + A16
Nói tới hàng, ta nghĩ đến hàm ROW(): ROW(A1) = 1, ROW(A6) = 6, v.v...
Và ở ví dụ vừa nêu trên đây, ta để ý các con số 1, 6, 11, 16 khi đem chia cho 5 đều dư 1, vậy ta nghĩ đến hàm MOD(), lấy số thứ tự của hàng chia cho 5: MOD(ROW(A1), 5) = 1, MOD(ROW(A6), 5) = 1, v.v...
Vậy ta sẽ lập công thức cho mảng A1:A20:
Xét trong khối A1:A20, ô nào có số thứ tự của hàng chia cho 5 mà dư 1, thì lấy các ô đó cộng lại:
{= SUM(IF(MOD(ROW(A1:A20), 5) = 1, A1:A20, 0))}
Hay cụ thể hơn, gọi dãy ô để tính tổng là range, và số hàng cách nhau giữa các ô là n, ta sẽ có công thức:
{= SUM(IF(MOD(ROW(range), n) = 1, range, 0))}
Con số 1 ở đây không phải là con số cố định, mà nó là số dư của phép chia của số thứ tự cho n. Do đó, tùy vào điều kiện của bài toán mà ta thay bằng con số thích hợp.
Chẳng hạn, cũng ví dụ trên đây, như ta muốn tính tổng của các ô A2, A7, A12, A17 thì công thức sẽ là:
{= SUM(IF(MOD(ROW(A1:A20), 5) = 2, A1:A20, 0))}
(2 là số dư của 2, 7, 12, 17 cho 5)
Cộng các ô có số thứ tự hàng là chẵn, hoặc có số thứ tự hàng là lẻ
Từ bài toán trên đây, ta có công thức để cộng các ô có số thứ tự hàng làm chẵn:
{= SUM(IF(MOD(ROW(Range), 2) = 0, Range, 0))}
Và công thức để cộng các ô có số thứ tự hàng làm lẻ:
Nếu bạn muốn có một công thức để xem thử một năm nào đó có phải là năm nhuận hay không, bạn có thể dùng hàm MOD(). Năm nhuận, là năm chia hết cho 4, hay phép dư của phép chia số năm cho 4 thì bẳng 0 ở công thức sau đây:
= MOD(year, 4)
Số năm phải là một con số có 4 chữ số.
Công thức trên chỉ đúng trong khoảng từ năm 1901 đến 2099 (có lẽ chúng ta cũng sống tối đa trong khoảng thời gian này thôi). Công thức này không đúng với năm 1900 và 2100, bởi vì điều kiện để tính năm nhuận còn có chuyện: Năm nhuận là năm chia hết cho 4, nếu năm này tận cùng bằng hai con số 0 thì nó phải chia hết cho 400 (ví dụ, năm 2000).
Vậy, để có một công thức đúng cho tất cả mọi năm, ta làm một công thức luận lý như sau:
Chắc cũng có một lúc nào đó, bạn thích định dạng cho bảng tính của mình theo kiểu Ledger Shading. Ledger Shading là kiểu định dạng các hàng có màu xen kẽ nhau (ví dụ, xanh và trắng). Loại định dạng này thích hợp cho những danh sách dài, có nhiều cột, giúp ta phân biệt được hàng này với hàng kia cách dễ dàng, ít khi bị nhìn lầm dữ liệu giữa các hàng...
Hình sau đây là một ví dụ:
Dĩ nhiên là việc này rất dễ thực hiện, chúng ta chỉ cần chọn các hàng xen kẽ nhau và tô màu cho nó. Tuy nhiên, nếu làm thủ công bằng tay, thì sẽ có một số bất tiện sau:
- Rất lâu cho những bảng dữ liệu lớn.
- Mỗi khi chèn thêm một hàng hoặc xóa bớt một hàng, thì phải định dạng lại.
Để tránh những bất tiện đó, bạn có thể dùng một liên kết giữa hàm MOD() và chức năng Conditional Formatting (định dạng có điều kiện) của Excel.
Cách làm như sau:
Chọn vùng bạn muốn định dạng
Gọi hộp thoại Conditional Formatting, và chọn New Ruler để mở hộp thoại New Formatting Ruler
Chọn Use a Formula to Determine Which Cells to Format
Trong khung Format values where this formular is true, gõ công thức = MOD(ROW(), 2)
Nhấn nút Format... để mở hộp thoại Format Cells
Chọn tab Fills, chọn màu bạn thích tô cho các hàng xen kẽ với màu trắng, rồi nhấn OK để quay về hộp thoại New Formatting Ruler
Nhấn OK
Công thức = MOD(ROW(), 2) sẽ trả về 1 cho những hàng có số thứ tự lẻ và trả về 0 cho những hàng có số thứ tự chẵn. Bởi vì 1 thì tương đương với TRUE, nên Excel sẽ áp dụng màu tô mà bạn đã chọn cho tất cả những hàng có số thứ tự lẻ trong vùng bạn muốn định dạng, và bỏ qua những hàng có số thứ tự chẵn.
Tương tự,
Nếu muốn định dạng các cột có màu xen kẽ, bạn chỉ cần thay công thức ở trên thành: = MOD(COLUMN(), 2)
Nếu thích định dạng cho hàng có số thứ tự lẻ thì không tô màu, còn hàng có số thứ tự chẵn mới tô màu, bạn thay đổi công thức trên một tí: = MOD(ROW() + 1, 2)
Đôi khi, chúng ta cần có một dữ liệu mô phỏng để thử nghiệm một công việc, một kế hoạch gì đó, và cần điền một vài con số vào để có cái mà thử nghiệm. Trong nhiều trường hợp, chúng ta sẽ cần có những con số ngẫu nhiên, không biết trước. Excel cung cấp cho chúng ta hai hàm để lấy số ngẫu nhiên, đó là RAND() và RANDBETWEEN().
Hàm RAND()
Cú pháp: = RAND()
Hàm RAND() trả về một con số ngẫu nhiên lớn hơn hoặc bằng 0 và nhỏ hơn 1. Nếu dùng hàm để lấy một giá trị thời gian, thì RAND() là hàm thích hợp nhất.
Bên cạnh đó, cũng có những cách để ép RAND() cung cấp cho chúng ta những con số ngẫu nhiên nằm giữa hai giá trị nào đó.
Để lấy một số ngẫu nhiên lớn hơn hoặc bằng 0 và nhỏ hơn n, ta dùng cú pháp:
RAND() * n
Ví dụ, công thức sau đây sẽ cung cấp cho chúng ta một con số ngẫu nhiên giữa 0 và 30:
= RAND() * 30
Trường hợp khác, mở rộng hơn, chúng ta cần có một con số ngẫu nhiên lớn hơn hoặc bằng số m nào đó, và nhỏ hơn số n nào đó, ta dùng cú pháp:
RAND() * (n - m) + m
Ví dụ, để lấy một số ngẫu nhiên lớn hơn hoặc bằng 100 và nhỏ hơn 200, ta dùng công thức:
= RAND() * (200 - 100) + 100
Lưu ý:
Do hàm RAND() là một hàm biến đổi (volatile function), tức là kết quả do RAND() cung cấp có thể thay đổi mỗi khi bạn cập nhật bảng tính hoặc mở lại bảng tính, ngay cả khi bạn thay đổi một ô nào đó trong bảng tính...
Để có một kết quả ngẫu nhiên nhưng không thay đổi, bạn dùng cách sau:
Sau khi nhập công thức = RAND() vào, bạn nhấn F9 và sau đó nhấn Enter. Động tác này sẽ lấy một con số ngẫu nhiên ngay tại thời điểm gõ công thức, nhưng sau đó thì luôn dùng con số này, vì trong ô nhập công thức sẽ không còn hàm RAND() nữa.
Ở bài trên, tôi đã trình bày cách lấy một số ngẫu nhiên nằm trong một khoảng {n, m} nào đó:
= RAND() * (n - m) + m
Có một hàm nữa trong Excel có chức năng tương tự công thức trên: Hàm RANDBETWEEN().
RANDBETWEEN() chỉ khác RAND() ở chỗ: RANDBETWEEN() cho kết quả là số nguyên, còn RAND() thì cho kết quả vừa là số nguyên vừa là số thập phân.
Hàm RANDBETWEEN()
Hàm RANDBETWEEN() trả về một số nguyên ngẫu nhiên nằm trong một khoảng cho trước.
Cú pháp: = RANDBETWEEN(bottom, top)
bottom: Số nhỏ nhất trong dãy tìm số ngẫu nhiên (kết quả sẽ lớn hơn hoặc bằng số này)
top: Số lớn nhất trong dãy tìm số ngẫu nhiên (kết quả sẽ nhỏ hơn hoặc bằng số này)
Ví dụ: = RANDBETWEEN(0, 59) sẽ cho kết quả là một số nguyên nằm trong khoảng 0 tới 59.
- Để tính lũy thừa của cơ số khác, bạn có thể dùng toán tử ^ (dấu mũ), hoặc dùng hàm POWER()
- Hàm EXP() là nghịch đảo của hàm LN(): tính logarit tự nhiên của một số
Ví dụ:
EXP(1) = 2.718282 (là chính cơ số e) EXP(2) = 7.389056 (bình phương của e)