Nhờ các bạn giải thích về hàm ROUND trong VBA

  • Thread starter Thread starter dvu58
  • Ngày gửi Ngày gửi
Liên hệ QC

dvu58

Thành viên thường trực
Tham gia
29/4/07
Bài viết
298
Được thích
378
Không hiểu tại sao lúc thì Round làm tròn lên; lúc thì lại làm tròn xuống?

Tôi muốn làm tròn 0.5 thành 1 thì dùng hàm round không chính xác. Phải làm sao đây?

Mong các bạn giải thích giúp. Cảm ơn các bạn.
 

File đính kèm

Mình nghĩ nó cũng giống hàm ROUND trong excel. Roundup là làm tròn lên ( VD roundup(aaa.value),0), còn roundown là tròn xuống. 0 là làm tròn theo số nguyên ( không có số thập phân nữa).
 
Upvote 0
Không hiểu tại sao lúc thì Round làm tròn lên; lúc thì lại làm tròn xuống?
Tôi muốn làm tròn 0.5 thành 1 thì dùng hàm round không chính xác. Phải làm sao đây?
Mong các bạn giải thích giúp. Cảm ơn các bạn.
Anh dùng hàm ROUND trong VBA với cú pháp sau :
Application.WorksheetFunction.Round(....)

TDN
 
Upvote 0
Không hiểu tại sao lúc thì Round làm tròn lên; lúc thì lại làm tròn xuống?

Tôi muốn làm tròn 0.5 thành 1 thì dùng hàm round không chính xác. Phải làm sao đây?

Mong các bạn giải thích giúp. Cảm ơn các bạn.
Hàm round khi dùng công thức thì 12.5 thành 13 , còn trong VBA là 12 .
Để thành 13 , bạn cọng với 0.1 rồi làm tròn .
 
Upvote 0
Các kết quả từ của sổ Immediate, Copy qua đây như sau

?10^-15
0.000000000000001

?round(.499999999999999 + 10^-15)
0

?round(.4999999999999999 + 10^-15)
1

+-+-+-+ +-+-+-+ )(&&@@ )(&&@@ +-+-+-+ +-+-+-+
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Trong trường hợp mình muốn dùng trực tiếp trong form như file testROUND ấy, chứ không dùng trong worksheet thì sao?
Tức là thế này thầy à:
Thay vì thầy viết:
Round((Val(TextBox1) + Val(TextBox2)) / 2, 0)
thì sửa lại thành:
WorksheetFunction.Round((Val(TextBox1) + Val(TextBox2)) / 2, 0)
Ngoài ra em nghĩ công thức này:
Int((Val(TextBox1) + Val(TextBox2)) / 2 + 0.5)
Vẫn cho kết quả đúng như thầy muốn đấy
 
Upvote 0
Tức là thế này thầy à:
Thay vì thầy viết:
Round((Val(TextBox1) + Val(TextBox2)) / 2, 0)
thì sửa lại thành:
WorksheetFunction.Round((Val(TextBox1) + Val(TextBox2)) / 2, 0)
Ngoài ra em nghĩ công thức này:
Int((Val(TextBox1) + Val(TextBox2)) / 2 + 0.5)
Vẫn cho kết quả đúng như thầy muốn đấy

Cảm ơn Tedaynuindu96081631 nhiều.
Kết quả theo cách của các bạn là rất tốt rồi.
Nhưng mình vẫn băn khoăn, không hiểu vì sao!?
(Vì sao lúc round lại làm tròn lên, lúc round lại làm tròn xuống?)
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn Tedaynuindu96081631 nhiều.
Kết quả theo cách của các bạn là rất tốt rồi.
Nhưng mình vẫn băn khoăn, không hiểu vì sao!?
(Vì sao lúc round lại làm tròn lên, lúc round lại làm tròn xuống?)
Em nghĩ đây là 1 lổi của MS, thầy cứ thử tìm trên Google từ khóa:
Excel VBA Problem with Round Function
Thầy sẽ thấy có hàng đóng ý kiến phàn nàn về điều này đấy
 
Upvote 0
Chào các bạn mình có một thắc mắc là khi nào thì dùng WorksheetFunction ; Application.WorksheetFunction hoặc không dùng
Nhờ các bạn giải thích , cảm ơn nhiều
 
Upvote 0
- Hàm round trong VBA làm tròn theo nguyên tắc phân phối thống kê (khác với round trong E) - mục đích của nguyên tắc này là đảm bảo chia đều tập làm tròn thành 2 phần xoay quanh giá trị 0.5. Những giá trị chẵn: 0.5, 2.5, 4.5, 6.5, 8.5, 10.5 ... thì làm tròn xuống; ngược lại, những giá trị lẻ: 1.5, 3.5, 5.5, ... thì làm tròn lên.

- Đối tượng WorksheetFunction có phạm vi global, cho nên có thể dùng mà không cần khai báo đối tượng cha của nó (Application); cũng như đối tượng ThisWorkBook là thành viên của Application nhưng ta cũng không cần khai báo Application.
- Một số trường hợp có cách dùng tương tự như trên: như ta có thể dùng Sheets(...) mà không cần dùng ActiveWorkBook.Sheets(...) hoặc ThisWorkBook.Sheets(...) khi xét trong ngữ cảnh của workbook hiện thời; dùng Cells(...) để nói đến toàn bộ cell của sheet hiện thời...
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom