Mời thầy xem hộ em với, không biết là sai ở đâu,? thầy xem cái file thứ 2.
Khi mạn phép sửa code của bạn ndu tôi đã có nói rồi. Với chuỗi > 15 chữ số thì code sẽ không đúng nữa. Vd. nếu bạn nhập số 123456789987654321 thì Excel hiển thị cho bạn ở ô nhập là
1,23457E+17. Tuy nhiên Excel "lưu" trong bộ nhớ số chính xác hơn. Nếu bạn click vào ô thì trên thanh công thức bạn sé có là 123456789987654000 (tức không phải là
1,23457E+17 = 123457000000000000 mà chính xác hơn), tuy nhiên nó không phải số mà bạn đã nhập nữa.
Đấy mới chỉ là 1 vấn đề. Vấn đề thứ hai là khi số được truyền vào hàm SumDigits thì số có dạng
1,23456789987654E+17
Tất nhiên sau khi thực hiện lệnh tmp = .Replace(Num, "") thì
tmp = "12345678998765417"
Dĩ nhiên lúc này tổng các chữ số là 92.
Tôi đã nói rồi. Khi số có > 15 chữ số thì số truyền vào hàm sẽ có dạng x,y...zE+abc
Thậm chí nếu ta xét các th này bằng cách không thực hiện lệnh tmp = .Replace(Num, "") mà trước hết lược bỏ E thì số xy...z0...0 cũng không phải là số mà người dùng đã nhập vào ô trên sheet (số 123456789987654000 không phải là số đã nhập 123456789987654321)
Vậy không còn cách nào khác nữa. Nếu ta muốn hỗ trợ chuỗi dài tùy ý thì BẮT BUỘC ta phải nhập vào sheet dữ liệu ở dạng text. Hoặc ít ra thì với những số lớn phải nhập vào sheet dưới dạng text.
Bạn có 2 lựa chọn
a. Viết hàm hỗ trợ các số có tối đa 15 chữ số - và nhập vào sheet bình thường
b. Viết hàm hỗ trợ chuỗi dài bất kỳ - lúc này bắt buộc nhập vào sheet dưới dạng text. Chỉ riêng cái khoản số quá dài sẽ bị "làm tròn" đã đủ để nó khác với số người dùng đã nhập rồi. Vậy thì làm gì có chuyện tính tổng các chữ số mà người dùng nhập??? Chỉ có chuyện tính tổng các chữ số của số do "ông" Excel nhập thôi chứ. Tính tổng của ông Excel cũng dễ thôi nhưng yêu cầu là tính tổng của người dùng nhập cơ mà.