Cesarettin lưu ý rằng hàm trang tính MOD không thể tạo ra kết quả khi số đang được đánh giá là 268.435.456 hoặc lớn hơn và số chia là 2. Nếu số nhỏ hơn này, không có vấn đề gì. Ví dụ: nếu hàm là MOD (268435455, 2) thì không có vấn đề gì. Anh ấy tự hỏi liệu có cách nào để sử dụng hàm MOD với các số lớn hơn và ước của 2 không?

Vấn đề thực sự lớn hơn những gì Cesarettin đề xuất. Microsoft biết về vấn đề này; nó dường như bắt nguồn từ các vấn đề với các công thức bên trong được MOD sử dụng. Bạn có thể tìm thêm thông tin về lỗi tại đây:

http://support.microsoft.com/kb/119083

Về cơ bản, hàm MOD trả về lỗi nếu số chia (đối số thứ hai trong hàm MOD), nhân với 134,217,728, nhỏ hơn hoặc bằng số được đánh giá (đối số đầu tiên trong hàm MOD).

Do đó, vấn đề xảy ra khi số được đánh giá là 268.435.456 và số bị chia là 2, số được đánh giá là 402.653.184 và số bị chia là 3, số được đánh giá là 536.870.912 và số bị chia là 4, v.v.

Giải pháp được đề xuất bởi Microsoft chỉ đơn giản là không sử dụng chức năng MOD và thay vào đó dựa vào công thức sau:

=number-(INT(number/divisor)*divisor)

Tuy nhiên, đây không phải là giải pháp duy nhất. Bạn cũng có thể sử dụng các cách tiếp cận công thức khác. Ví dụ:

=MOD(MOD(number,134217728*divisor),divisor)

Điều này sẽ giải quyết cho các số lớn hơn nhiều so với giới hạn cho MOD, nhưng về mặt lý thuyết sẽ gặp phải vấn đề tương tự khi số được đánh giá đạt 134,217,728134,217,728divisor. Đối với hầu hết các mục đích sử dụng, đây là giới hạn đủ lớn để không bao giờ đạt được.

Nếu bạn chỉ cần tìm môđun của một số chia hết cho 2, thì bạn có thể chèn dấu kiểm vào công thức của mình theo cách sau:

=MOD(IF(A1>=268435456,A1-268435456,A1),2)

Điều này sẽ kiểm tra xem số đang được đánh giá (trong trường hợp này là trong ô A1) có lớn hơn giới hạn không và nếu nó là giới hạn thì trừ đi giới hạn trước khi tính toán mô-đun. Bạn cũng có thể loại bỏ giới hạn MOD một cách hiệu quả bằng cách sử dụng công thức sau:

=MOD(MOD(number,2^16),2))

Điều này nhận modulo số lớn 2 đến lũy thừa 16, sau đó lấy giá trị kết quả là modulo 2. Nếu các số được xem dưới dạng nhị phân, thật dễ dàng để xem điều gì đang xảy ra. MOD (largenum, 2 ^ 16) chỉ giảm tất cả các bit ở bên trái của chữ số nhị phân thứ 16. Đối với modulo 2, chỉ cần có chữ số ngoài cùng bên phải để xác định kết quả, do đó, các bit bị giảm không bao giờ ảnh hưởng đến kết quả, bất kể giá trị.

Tất nhiên, bạn có thể chỉ cần tạo hàm MOD của riêng mình trong VBA và sử dụng nó trong công thức của bạn thay vì hàm MOD tích hợp sẵn.

Function DblMod(Dividend, Divisor)

' Declare two double precision variables     Dim D1 As Double     Dim D2 As Double

' Copy function arguments to local variables     D1 = Dividend     D2 = Divisor

DblMod = D1 Mod D2 End Function

Hàm chỉ cho phép bạn chuyển hai đối số vào hàm VBA. Sau đó, nó dựa vào chức năng VBA Mod, không có giới hạn giống như chức năng trang tính MOD.

_Lưu ý: _

Nếu bạn muốn biết cách sử dụng các macro được mô tả trên trang này (hoặc trên bất kỳ trang nào khác trên trang ExcelTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.

ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.

Mẹo này (3302) áp dụng cho Microsoft Excel 97, 2000, 2002 và 2003.