Public Function cong(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
cong = a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9 + a10
End Function
(*) Thứ nhất: Bạn phải đi từ dễ đến khó, phải biết bò rồi mới đi chập chững!Mình muốn làm một cái hàm tính thuế! Nhờ các thành viên trên 4rum kiểm tra và sửa giúp ! Cám ơn nhiều.
(*) Thứ nhất: Bạn phải đi từ dễ đến khó, phải biết bò rồi mới đi chập chững!
Mình luôn khuyên bản thân mình, các khai báo trong chương trình phải tường minh, rõ ràng.
Tuy những biến có kiểu dạng Variant chăng nữa cũng phải ghi vô. Đây mãi là thoái quen tốt hết sức, một khi muốn tiếp cận & làm bạn lâu dài với VBA; Mình không khi nào viết câu lệnh tương tự như:
Dim i, jd As Integer
sau đó dùng i chỉ như là kiểu Integer, hay kiểu Byte vì vòng lặp bên dưới chỉ biến thiên chưa quá 255. Như các nhá lập trình lão luyện khuyên chúng ta trong trường hợp này là
Dim i As Long , jd As Long
(*) Cú pháp hàm của bạn là
Public Function TTN(Kiemtra, DSDA, TDN, namM, namG, namUD, TUD, TNCT) As Double
. . .
End Function
Theo vậy, hàm sẽ nhận 08 (tám) tham số tất thảy.
Nhưng trong trang tính bạn nhập hàm như vậy:
=+TTN($B$4:$B$5,$B$2,$C$2,$D$2,$E$2) Là bạn cung cấp mới hơn nữa tham số; Nếu nó không báo lỗi mới là chuyện lạ!
Hoặc là bạn phải truyền cho cái hàm thân thương của bạn đủ 08 tham số, hay thêm 3 từ Optional lên trước 3 tham số cuối, nếu bạn có lúc nào đó lúc truyền, lúc không truyền các tham số tùy tiện.
Cũng muốn viết lại hàm cho bạn, nhưng thực tình không hiểu nhu cầu tính toán của bạn là gì nữa. Đành chờ hồi âm của bạn vậy!
ĐĐĐ!!!
Public Function TTN(KiemTra, DSDA, TDN, namM, namG, namUD, TUD, TNCT) As Double
1 Dim i, jd As Integer: jd = 0
For i = 1 To 40
3 If KiemTra(i) > 0 Then jd = jd + 1
Next i
5 If jd > namM Then TTN = 0
If jd > namM And jd <= namG Then _
TTN = TNCT * TUD / 2
7 If jd > namUD Then TTN = TDN * TNCT
End Function
Thật ra hàm của bạn có thể viết như vầy:
PHP:Public Function TTN(KiemTra, DSDA, TDN, namM, namG, namUD, TUD, TNCT) As Double 1 Dim i, jd As Integer: jd = 0 For i = 1 To 40 3 If KiemTra(i) > 0 Then jd = jd + 1 Next i 5 If jd > namM Then TTN = 0 If jd > namM And jd <= namG Then _ TTN = TNCT * TUD / 2 7 If jd > namUD Then TTN = TDN * TNCT End Function
Những cái chưa đúng của bạn là :
(1) Tham số DSDA không có xài trong hàm, bạn cố tình đưa vô để làm chi?
(2) Tại sao bạn viết For i=1 to 40 ; Con số 40 này theo mình thấy là số records của trang tính.
Nhưng cú pháp hàm trang trang tính thì lại phải hiểu vùng kiểm tra của record thứ j nào đó là từ ô đầu tiên '$B$4' cho đến ô 'B' thuộc dòng thứ j này
Kết quả jd của bạn bao giờ cũng bằng 36. Dẫn tới việc, hàm sẽ chuyển đến thực thi lệnh đã đánh số 7 nêu trên;
(3) Nhưng trớ trêu là bạn không cung cấp hai thông số TDN & TNCT thì lấy gì cho đứa con của bạn làm tiếp? Mình kiếm đỏ con mắt vẫn không thấy tẹo dấu vết nào của hai tham số trên trong trang tính cả bạn à?!?
Bạn thấy không, do không tường minh mà bạn tự làm khổ chúng mình hơn ngày trời nay đó!
Điều kiện cần là hàm phải đúng cái đã, chứ không phải viết cho oai bằng cách viết tắc ngang cái này, tắc ngang cái kia. Mình khuyên bạn đừng nên bắt chước hoàn toàn mấy cha lập trình chuyên nghiệp ở những chổ như vậy. Chúng ta là những người tự học, & quan trọng là phải hiểu thân phận mình. Không nên đua đòi, rồi chính sự đua đòi đó phản lại chúng ta!
Đây là những lời khó nghe, nhưng mong bạn ráng nghe nha!