Hàm tính thuế TNCN 2009

  • Thread starter Vu Manh Truong
  • Ngày gửi
V

Vu Manh Truong

Guest
17/5/07
1
0
0
Vung Tau
Dear all,

Sau khi đọc bài hàm tính thuế TNCN 2009, tôi có dow về dùng thử và xin có một số ý kiến nhận xét như sau:

- theo hàm trên từ thu nhập chịu thuế(TNCT) tính ra thuế tncn mới tính đến giảm trừ gia cảnh mà chưa trừ đi khoản giảm trừ do đóng bảo hiểm bắt buộc, giảm trừ khác theo luật định

- Chỉ có công thức quy đổi từ thu nhập sau thuế_TNST (không bao gồm các khoản được giảm trừ) ra thu nhập tính thuế(TNTT). Mà thường trong hợp đồng lao động là ký gross_TNCT hoặc net_số tiền thực tế mà người lao động nhận được, ( net = TNST + các khoản được giảm trừ = TNCT - thuế).

Sau khi tìm hiểu các công thức tôi có sửa lại và thêm vào một số công thức để tính thuế và quy đổi như sau:

1. Các công thức
- Công thức tính thuế TNCN đã trừ các khoản giảm trừ gia cảnh, bảo hiểm bắt buộc, giảm trừ khác

- Công thức tính thuế TNCN trước khi trừ các khoản giảm trừ gia cảnh nhưng đã trừ bảo hiểm bắt buộc và các khoản giảm trừ khác

- Công thức tính thuế TNCN trước khi trừ các khoản giảm trừ gia cảnh, bảo hiểm bắt buộc nhưng chưa trừ các khoản giảm trừ khác

- Công thức quy đổi từ thu nhập sau thuế không bao gồm các khoản giảm trừ ra thu nhập tính thuế

- Công thức quy đổi từ thu nhập sau thuế không bao gồm các khoản giảm trừ (ở đây chỉ tính đến giảm trừ gia cảnh, bảo hiểm bắt buộc nhưng chưa tính đến các khoản giảm trừ khác) ra thu nhập chịu thuế

- Công thức quy đổi từ thu nhập sau thuế đã bao gồm các khoản giảm trừ_thu nhập net thực nhận (gồm giảm trừ gia cảnh, bảo hiểm bắt buộc nhưng chưa tính đến các khoản giảm trừ khác) ra thu nhập chịu thuế

2. Cấu trúc công thức

2.1. Công thức tính thuế TNCN đã trừ các khoản giảm trừ gia cảnh, bảo hiểm bắt buộc, giảm trừ khác theo luật định (giữ nguyên theo hàm cũ)

pit(tn) trong đó tn = thu nhập chịu thuế TNCN sau khi đã trừ các khoản được giảm trừ

2.2. Công thức tính thuế TNCN trước khi trừ các khoản giảm trừ gia cảnh nhưng đã trừ các khoản giảm trừ bảo hiểm bắt buộc, giảm trừ khác (giữ nguyên theo hàm cũ)

pitpt(income;pt) trong đó income là thu nhập trước khi giảm trừ gia cảnh cho cá nhân và pt là số người phụ thuộc.

2.3. Công thức tính thuế TNCN trước khi trừ các khoản giảm trừ gia cảnh, bảo hiểm bắt buộc nhưng đã trừ các khoản giảm trừ khác theo luật định ( thêm mới)

pitgt(income, pt, bh)

Trong đó: income là thu nhập trước khi giảm trừ gia cảnh, bảo hiểm bắt buộc nhưng đã trừ các khoản được giảm trừ khác. Pt là số người phụ thuộc, bh là giá trị các khoản bảo hiểm bắt buộc được giảm trừ

Ví dụ: Bạn có thu nhập chịu thuế(TNCT) 10.000.000 đ/tháng, phải nuôi bố mẹ già và một con nhỏ (3 người phụ thuộc), bảo hiểm bắt buộc phải đóng của bạn là 600.000 đ/tháng (gồm 5% là BHXH, 1% là BHYT theo lương) thì thuế TNCN của bạn tính như sau

pitgt(10.000.000,3,600.000) = 30.000 đ


2.4. Công thức quy đổi từ thu nhập sau thuế không bao gồm các khoản giảm trừ ra thu nhập tính thuế(giữ nguyên theo hàm cũ)

tntt(tnst) trong đó tnst là số tiền thu nhập không bao gồm các khoản được giảm trừ sau khi đã trừ thuế TNCN

VD theo vi dụ trên tnst = 10.000.000 - (4.000.000 + 3*1.600.000 + 600.000) - 30.000 = 570.000 đ

tntt(tnst) = tntt(570.000) = 600.000 đ

2.5. Công thức quy đổi từ thu nhập sau thuế không bao gồm các khoản được giảm trừ ( ở đây chỉ tinh đến giảm trừ gia cảnh và bảo hiểm bắt buộc) ra thu nhập chịu thuế(thêm mới)

tnct(tnst, pt, bh) trong đó tnst là số tiền thu nhập không bao gồm các khoản được giảm trừ sau khi đã trừ thuế TNCN. Pt là số người phụ thuộc, bh là giá trị các khoản bảo hiểm bắt buộc được giảm trừ

VD theo vd trên: tnst = 570.000 đ, pt = 3 người, bh = 600.000 đ

tnct(tnst,pt,bh) = tnst(570.000,3,600.000) = 10.000.000 đ

2.6. Công thức quy đổi từ thu nhập sau thuế đã bao gồm các khoản giảm trừ_thu nhập net (ở đây chỉ xét đến giảm giảm trừ gia cảnh và bảo hiểm bắt buộc) ra thu nhập chịu thuế(thêm mới)

tnctnet(net, pt, bh) trong đó net là số tiền nhận được sau khi đã trừ thuế TNCN và cộng với các khoản được giảm trừ khi tính thuế. Pt là số người phụ thuộc, bh là giá trị các khoản bảo hiểm bắt buộc được giảm trừ

Theo vd trên: số tiền thực tế (net) mà bạn nhân được sau khi trừ thuế là:
net = 10.000.000 - 30.000 = 9.970.000 đ, pt = 3, bh = 600.000 đ

tnctnet(9.970.000,3,600.000) = 10.000.000 đ

Như vậy tuỳ vào từng trường hợp cụ thể bạn biết được thông tin về tnct, tnst, số tiền thực nhận_net mà bạn tính ra thuế, tntt hoặc tnct_gross của bạn

TRên dây là một số ý kiến của tôi, rất mong nhận được sự góp ý. Do ko được quyền insert file lên diễn đàn nên bạn nào cần file add-in để tham khảo liên hệ với tôi qua emall vmt_m1984@yahoo.com.vn;
vmt100884@yahoo.com.vn; truongvu@ptsc.com.vn

Note: Xin gửi kèm theo cấu trúc của từng hàm, do ko phải dân IT nên tôi chỉ dựa vào hàm tinh thuế của tác giả trước để sửa lại và chèn thêm một số biến và công thức vào để tính theo yêu cầu của mình chứ ko phải là viết mới hoàn toàn
1.
Function pit(tn)
'Tinh thue TNCN sau khi da giam tru gia canh va phu thuoc
If (tn > 0) And (tn <= 5000000) Then
pit = Round(tn * 0.05, 0)
ElseIf (tn > 5000000) And (tn <= 10000000) Then
pit = 250000 + Round((tn - 5000000) * 0.1, 0)
ElseIf (tn > 10000000) And (tn <= 18000000) Then
pit = 750000 + Round(((tn - 10000000) * 0.15), 0)
ElseIf (tn > 18000000) And (tn <= 32000000) Then
pit = 1950000 + Round(((tn - 18000000) * 0.2), 0)
ElseIf (tn > 32000000) And (tn <= 52000000) Then
pit = 4750000 + Round(((tn - 32000000) * 0.25), 0)
ElseIf (tn > 52000000) And (tn <= 80000000) Then
pit = 9750000 + Round(((tn - 52000000) * 0.3), 0)
ElseIf (tn > 80000000) Then
pit = 18150000 + Round(((tn - 80000000) * 0.35), 0)
End If
End Function

2.
Function pitpt(income, pt)
'Tinh thue TNCN truoc khi giam tru gia canh va phu thuoc
tnct1 = income - 4000000 - pt * 1600000
If (tnct1 <= 0) Then
pitpt = 0
End If
If (tnct1 > 0) And (tnct1 <= 5000000) Then
pitpt = Round(tnct1 * 0.05, 0)
ElseIf (tnct1 > 5000000) And (tnct1 <= 10000000) Then
pitpt = 250000 + Round((tnct1 - 5000000) * 0.1, 0)
ElseIf (tnct1 > 10000000) And (tnct1 <= 18000000) Then
pitpt = 750000 + Round(((tnct1 - 10000000) * 0.15), 0)
ElseIf (tnct1 > 18000000) And (tnct1 <= 32000000) Then
pitpt = 1950000 + Round(((tnct1 - 18000000) * 0.2), 0)
ElseIf (tnct1 > 32000000) And (tnct1 <= 52000000) Then
pitpt = 4750000 + Round(((tnct1 - 32000000) * 0.25), 0)
ElseIf (tnct1 > 52000000) And (tnct1 <= 80000000) Then
pitpt = 9750000 + Round(((tnct1 - 52000000) * 0.3), 0)
ElseIf (tnct1 > 80000000) Then
pitpt = 18150000 + Round(((tnct1 - 80000000) * 0.35), 0)
End If
End Function

3.
Function pitgt(income, pt, bh)
'Tinh thue TNCN truoc khi giam tru gia canh phu thuoc va BHXH, BHYT
tntt1 = income - 4000000 - pt * 1600000 - bh
If (tntt1 <= 0) Then
pitgt = 0
End If
If (tntt1 > 0) And (tntt1 <= 5000000) Then
pitgt = Round(tntt1 * 0.05, 0)
ElseIf (tntt1 > 5000000) And (tntt1 <= 10000000) Then
pitgt = 250000 + Round((tntt1 - 5000000) * 0.1, 0)
ElseIf (tntt1 > 10000000) And (tntt1 <= 18000000) Then
pitgt = 750000 + Round(((tntt1 - 10000000) * 0.15), 0)
ElseIf (tntt1 > 18000000) And (tntt1 <= 32000000) Then
pitgt = 1950000 + Round(((tntt1 - 18000000) * 0.2), 0)
ElseIf (tntt1 > 32000000) And (tntt1 <= 52000000) Then
pitgt = 4750000 + Round(((tntt1 - 32000000) * 0.25), 0)
ElseIf (tntt1 > 52000000) And (tntt1 <= 80000000) Then
pitgt = 9750000 + Round(((tntt1 - 52000000) * 0.3), 0)
ElseIf (tntt1 > 80000000) Then
pitgt = 18150000 + Round(((tntt1 - 80000000) * 0.35), 0)
End If
End Function

4.
Function tntt(tnst)
'Quy doi tu thu nhap sau thue ko bao gom cac khoan giam tru ra thu nhap tinh thue
If (tnst > 0) And (tnst <= 4750000) Then
tntt = Round(tnst / 0.95, 0)
ElseIf (tnst > 4750000) And (tnst <= 9250000) Then
tntt = Round((tnst - 250000) / 0.9, 0)
ElseIf (tnst > 9250000) And (tnst <= 16050000) Then
tntt = Round((tnst - 750000) / 0.85, 0)
ElseIf (tnst > 16050000) And (tnst <= 27250000) Then
tntt = Round((tnst - 1650000) / 0.8, 0)
ElseIf (tnst > 27250000) And (tnst <= 42250000) Then
tntt = Round((tnst - 3250000) / 0.75, 0)
ElseIf (tnst > 42250000) And (tnst <= 61850000) Then
tntt = Round((tnst - 5850000) / 0.7, 0)
ElseIf (tnst > 61850000) Then
tntt = Round((tnst - 9850000) / 0.65, 0)
End If
End Function

5.
Function tnct(tnst, pt, bh)
'Quy doi tu thu nhap sau thue ko bao gom ca khoan giam tru ra thu nhap chiu thue
If (tnst > 0) And (tnst <= 4750000) Then
tnct = Round(tnst / 0.95, 0) + 4000000 + pt * 1600000 + bh
ElseIf (tnst > 4750000) And (tnst <= 9250000) Then
tnct = Round((tnst - 250000) / 0.9, 0) + 4000000 + pt * 1600000 + bh
ElseIf (tnst > 9250000) And (tnst <= 16050000) Then
tnct = Round((tnst - 750000) / 0.85, 0) + 4000000 + pt * 1600000 + bh
ElseIf (tnst > 16050000) And (tnst <= 27250000) Then
tnct = Round((tnst - 1650000) / 0.8, 0) + 4000000 + pt * 1600000 + bh
ElseIf (tnst > 27250000) And (tnst <= 42250000) Then
tnct = Round((tnst - 3250000) / 0.75, 0) + 4000000 + pt * 1600000 + bh
ElseIf (tnst > 42250000) And (tnst <= 61850000) Then
tnct = Round((tnst - 5850000) / 0.7, 0) + 4000000 + pt * 1600000 + bh
ElseIf (tnst > 61850000) Then
tnct = Round((tnst - 9850000) / 0.65, 0) + 4000000 + pt * 16000000 + bh
End If
End Function

6.
Function tnctnet(net, pt, bh)
'Quy doi tu thu nhap sau thue bao gom ca khoan giam tru ra thu nhap chiu thue
If (net > 0) And (net <= (4750000 + 4000000 + pt * 1600000 + bh)) Then
tnctnet = Round((net - 4000000 - pt * 1600000 - bh) / 0.95, 0) + 4000000 + pt * 1600000 + bh
ElseIf (net > (4750000 + 4000000 + pt * 1600000 + bh)) And (net <= (9250000 + 4000000 + pt * 1600000 + bh)) Then
tnctnet = Round((net - 4000000 - pt * 1600000 - bh - 250000) / 0.9, 0) + 4000000 + pt * 1600000 + bh
ElseIf (net > (9250000 + 4000000 + pt * 1600000 + bh)) And (net <= (16050000 + 4000000 + pt * 1600000 + bh)) Then
tnctnet = Round((net - 4000000 - pt * 1600000 - bh - 750000) / 0.85, 0) + 4000000 + pt * 1600000 + bh
ElseIf (net > (16050000 + 4000000 + pt * 1600000 + bh)) And (net <= (27250000 + 4000000 + pt * 1600000 + bh)) Then
tnctnet = Round((net - 4000000 - pt * 1600000 - bh - 1650000) / 0.8, 0) + 4000000 + pt * 1600000 + bh
ElseIf (net > (27250000 + 4000000 + pt * 1600000 + bh)) And (net <= (42250000 + 4000000 + pt * 1600000 + bh)) Then
tnctnet = Round((net - 4000000 - pt * 1600000 - bh - 3250000) / 0.75, 0) + 4000000 + pt * 1600000 + bh
ElseIf (net > (42250000 + 4000000 + pt * 1600000 + bh)) And (net <= (61850000 + 4000000 + pt * 1600000 + bh)) Then
tnctnet = Round((net - 4000000 - pt * 1600000 - bh - 5850000) / 0.7, 0) + 4000000 + pt * 1600000 + bh
ElseIf (net > (61850000 + 4000000 + pt * 1600000 + bh)) Then
tnctnet = Round((net - 4000000 - pt * 1600000 - bh - 9850000) / 0.65, 0) + 4000000 + pt * 16000000 + bh
End If
End Function

Note: Nếu mọi người muốn tính thêm các khoản giảm trừ khác mọi người vào trưc tiếp trong công thức (ALT + F11) khai báo thêm biến và sửa lại hàm if theo biến mới khai báo. Sau khi dùng thử thấy sử dụng hàm if trực tiếp trên excell là linh hoạt nhất có thể thay đổi biến trực tiếp luôn khi tính cho phù hợp với bảng lương của từng người

Vũ Mạnh Trường
 
Sửa lần cuối:
Khóa học Quản trị dòng tiền
K

KTchip

Sơ cấp
16/4/08
27
1
1
Bình Dương
Hi, cảm ơn bạn về các tìm hiểu bổ ích này... Mình cũng đang đau đầu với Thuế TNCN mới đây... :cool2:
 
T

trinh19982003

Guest
10/2/09
1
0
0
37
32 nguyễn thị minh khai
Hi! Anh chi cho em biết luật thuế TNCN có hiệu lực chưa vậy? Áp dụng từ thời điểm nào? Đã bắt đầu kê khai và nộp thuế chưa? anh chị nào biết trả lời giúp em nha. Thanks!
 
Hoathico

Hoathico

Guest
4/8/08
149
0
0
Hà nội
Có hiệu lực bắt đầu từ ngày 01/01/2009 bạn à. Nhưng bạn được giãn nộp thuế đến tháng 5/2009.
 
M

metinhy

Guest
19/3/09
17
0
1
hcm
khi CƠ QUAN chi trả thu nhập muốn đăng ký cho cá nhân mã số thuế TNCN cần có mẫu 01DK/TNCN và bảng danh sách cá nhân thuộc đối tượng DKTTNCN nộp cho chi cục thuế ỏ cục thuế nè. nhưng ko biết upload lên =cách nào đây?
 
S

SA_DQ

Thành viên Cố vấn - Webketoan Mentors
29/6/05
569
100
43
66
HCM city
Như bữa trước mình có đề cập, các hàm này có thể viết gọn lại, như ví dụ sau:

1.
Function pit(tn)
'Tinh thue TNCN sau khi da giam tru gia canh va phu thuoc
If (tn > 0) And (tn <= 5000000) Then
pit = Round(tn * 0.05, 0)
ElseIf (tn > 5000000) And (tn <= 10000000) Then
pit = 250000 + Round((tn - 5000000) * 0.1, 0)
ElseIf (tn > 10000000) And (tn <= 18000000) Then
pit = 750000 + Round(((tn - 10000000) * 0.15), 0)
ElseIf (tn > 18000000) And (tn <= 32000000) Then
pit = 1950000 + Round(((tn - 18000000) * 0.2), 0)
ElseIf (tn > 32000000) And (tn <= 52000000) Then
pit = 4750000 + Round(((tn - 32000000) * 0.25), 0)
ElseIf (tn > 52000000) And (tn <= 80000000) Then
pit = 9750000 + Round(((tn - 52000000) * 0.3), 0)
ElseIf (tn > 80000000) Then
pit = 18150000 + Round(((tn - 80000000) * 0.35), 0)
End If
End Function
Option Explicit
Const Tr As Single = 10 ^ 6
Function PIT_(TN) As Double
'Tinh thue TNCN sau khi da giam tru gia canh va phu thuoc
Dim pit As Double
TN = TN / Tr
If (TN > 0) And (TN <= 5) Then
pit = TN * 0.05
ElseIf (TN > 5) And (TN <= 10) Then
pit = 0.25 + (TN - 5) * 0.1
ElseIf (TN > 10) And (TN <= 18) Then
pit = 0.75 + (TN - 10) * 0.15
ElseIf (TN > 18) And (TN <= 32) Then
pit = 1.95 + (TN - 18) * 0.2
ElseIf (TN > 32) And (TN <= 52) Then
pit = 4.75 + (TN - 32) * 0.25
ElseIf (TN > 52) And (TN <= 80) Then
pit = 9.75 + (TN - 52) * 0.3
ElseIf (TN > 80) Then
pit = 18.15 + (TN - 80) * 0.35
End If
PIT_ = Round(pit, 6) * Tr
End Function
 
C

catvang

Sơ cấp
15/2/08
2
0
1
50
HCM

Hàm của bạn nhìn hơi rườm rà. Có thể thu gọn 2 hàm pitpt() & pitgt() lại như vậy cho gọn:


Function pitpt(income, pt, Optional bh = 0)
'Tinh thue TNCN truoc khi giam tru gia canh va phu thuoc
tnct1 = income - 4000000 - pt * 1600000 - bh
Select Case tnct1
Case Is <= 0
pitpt = 0
Case Is <= 5000000
pitpt = Round(tnct1 * 0.05, 0)
Case Is <= 10000000
pitpt = 250000 + Round((tnct1 - 5000000) * 0.1, 0)
Case Is <= 18000000
pitpt = 750000 + Round(((tnct1 - 10000000) * 0.15), 0)
Case Is <= 32000000
pitpt = 1950000 + Round(((tnct1 - 18000000) * 0.2), 0)
Case Is <= 52000000
pitpt = 4750000 + Round(((tnct1 - 32000000) * 0.25), 0)
Case Is <= 80000000
pitpt = 9750000 + Round(((tnct1 - 52000000) * 0.3), 0)
Case Is > 80000000
pitpt = 18150000 + Round(((tnct1 - 80000000) * 0.35), 0)
End Select
End Function
 
QDuc

QDuc

Cao cấp
3/6/06
254
18
18
Biển khơi
Hàm của bạn mình đã thử viết lại như sau


Hàm của bạn nhìn hơi rườm rà. Có thể thu gọn 2 hàm pitpt() & pitgt() lại như vậy cho gọn:

Dễ hiểu, kiểm soát & trùng tu khi cần


Option Explicit
Const Tr As Single = 10 ^ 6
Function PIT_PT(income, PT, Optional BH = 0) As Double
'Tinh thue TNCN truoc khi giam tru gia canh va phu thuoc (PT)
Dim TNCT1 As Double

TNCT1 = (income - 4000000 - PT * 1600000 - BH) / Tr
Select Case TNCT1
Case Is <= 0
PIT_PT = 0
Case Is <= 5
PIT_PT = TNCT1 * 0.05
Case Is <= 10
PIT_PT = 0.25 + (TNCT1 - 5) * 0.1
Case Is <= 18
PIT_PT = 0.75 + (TNCT1 - 10) * 0.15
Case Is <= 32
PIT_PT = 1.95 + (TNCT1 - 18) * 0.2
Case Is <= 52
PIT_PT = 4.75 + (TNCT1 - 32) * 0.25
Case Is <= 80
PIT_PT = 9.75 + (TNCT1 - 52) * 0.3
Case Is > 80
PIT_PT = 18.15 + (TNCT1 - 80) * 0.35
End Select
PIT_PT = Round(PIT_PT * Tr, 6)
End Function
 
S

SA_DQ

Thành viên Cố vấn - Webketoan Mentors
29/6/05
569
100
43
66
HCM city
Có thể xài SWITCH() trong VBA, nhưng chỉ mang tính học thuật

Option Explicit
Function PitPT(income, PT, Optional BH = 0) As Double
'Tinh thue TNCN truoc khi giam tru gia canh va phu thuoc _
PT: So Nguoi Phu Thuoc

Dim TNCT1 As Double: Const GPE As Single = 10 ^ 6

TNCT1 = (income - 4000000 - PT * 1600000 - BH) / GPE
Dim Aa As Double, Bb As Double

Aa = CDbl(Switch(TNCT1 <= 5, "0", TNCT1 <= 10, ".25", TNCT1 <= 18, ".75", _
TNCT1 <= 32, "1.95", TNCT1 <= 52, "4.75", TNCT1 <= 80, "9.75", TNCT1 > 80, "18.15"))

Bb = TNCT1 - CDbl(Switch(TNCT1 <= 0, TNCT1, TNCT1 <= 5, 0, TNCT1 <= 10, "5", TNCT1 <= 18, "10", _
TNCT1 <= 32, "18", TNCT1 <= 52, "32", TNCT1 <= 80, "52", TNCT1 > 80, "80"))
Bb = Bb * CDbl(Switch(TNCT1 <= 5, "0.05", TNCT1 <= 10, "0.1", TNCT1 <= 18, "0.15", _
TNCT1 <= 32, "0.2", TNCT1 <= 52, "0.25", TNCT1 <= 80, "0.3", TNCT1 > 80, "0.35"))

PitPT = Round((Aa + Bb) * GPE, 6)
End Function
 
S

SA_DQ

Thành viên Cố vấn - Webketoan Mentors
29/6/05
569
100
43
66
HCM city
Mình xin gộp ba hàm đầu làm một đây:

Option Explicit
Const Tr As Single = 10 ^ 6

Function PITandPT(TNh As Double, Loai As String, Optional PT As Byte, _
Optional BH As Double = 0) As Double

Loai = UCase$(Loai)
If Loai = "P" Then
TNh = TNh / Tr
ElseIf Loai = "PT" Then
TNh = (TNh - 4000000 - PT * 1600000 - BH) / Tr
End If

Select Case TNh 'CT1
Case Is <= 0
PITandPT = 0
Case Is <= 5
PITandPT = TNh * 0.05
Case Is <= 10
PITandPT = 0.25 + (TNh - 5) * 0.1
Case Is <= 18
PITandPT = 0.75 + (TNh - 10) * 0.15
Case Is <= 32
PITandPT = 1.95 + (TNh - 18) * 0.2
Case Is <= 52
PITandPT = 4.75 + (TNh - 32) * 0.25
Case Is <= 80
PITandPT = 9.75 + (TNh - 52) * 0.3
Case Is > 80
PITandPT = 18.15 + (TNh - 80) * 0.35
End Select
PITandPT = Round(PITandPT * Tr, 6)

End Function
 
HongViet

HongViet

Cao cấp
10/11/05
286
10
18
Đà nẵng
Hàm thứ 5 còn sai (?) & có thể rút gọn lại hơn

Bỡi vì rườm rà quá nên khó kiểm soát lỗi:
5.
Function tnct(tnst, pt, bh)
'Quy doi tu thu nhap sau thue ko bao gom ca khoan giam tru ra thu nhap chiu thue
If (tnst > 0) And (tnst <= 4750000) Then
tnct = Round(tnst / 0.95, 0) + 4000000 + pt * 1600000 + bh
ElseIf (tnst > 4750000) And (tnst <= 9250000) Then
tnct = Round((tnst - 250000) / 0.9, 0) + 4000000 + pt * 1600000 + bh
ElseIf (tnst > 9250000) And (tnst <= 16050000) Then
tnct = Round((tnst - 750000) / 0.85, 0) + 4000000 + pt * 1600000 + bh
ElseIf (tnst > 16050000) And (tnst <= 27250000) Then
tnct = Round((tnst - 1650000) / 0.8, 0) + 4000000 + pt * 1600000 + bh
ElseIf (tnst > 27250000) And (tnst <= 42250000) Then
tnct = Round((tnst - 3250000) / 0.75, 0) + 4000000 + pt * 1600000 + bh
ElseIf (tnst > 42250000) And (tnst <= 61850000) Then
tnct = Round((tnst - 5850000) / 0.7, 0) + 4000000 + pt * 1600000 + bh
ElseIf (tnst > 61850000) Then
tnct = Round((tnst - 9850000) / 0.65, 0) + 4000000 + pt * 16000000 + bh
End If
End Function

Ta có thể thu gọn hàm này lại như sau:
Function tnct(tnst As Double, pt As Byte, bh As Double) As Double
'Quy doi tu thu nhap sau thue ko bao gom ca khoan giam tru ra thu nhap chiu thue
Dim PT_BH As Double
PT_BH = 4000000 + pt * 1600000 + bh

If (tnst > 0) And (tnst <= 4750000) Then
tnct = Round(tnst / 0.95, 0) + PT_BH
ElseIf (tnst > 4750000) And (tnst <= 9250000) Then
tnct = Round((tnst - 250000) / 0.9, 0) + PT_BH
ElseIf (tnst > 9250000) And (tnst <= 16050000) Then
tnct = Round((tnst - 750000) / 0.85, 0) + PT_BH
ElseIf (tnst > 16050000) And (tnst <= 27250000) Then
tnct = Round((tnst - 1650000) / 0.8, 0) + PT_BH
ElseIf (tnst > 27250000) And (tnst <= 42250000) Then
tnct = Round((tnst - 3250000) / 0.75, 0) + PT_BH
ElseIf (tnst > 42250000) And (tnst <= 61850000) Then
tnct = Round((tnst - 5850000) / 0.7, 0) + PT_BH
ElseIf (tnst > 61850000) Then
tnct = Round((tnst - 9850000) / 0.65, 0) + PT_BH
End If
End Function

Giống như ta đặc thừa số chung cho 1 biểu thức vậy mà!
 
QDuc

QDuc

Cao cấp
3/6/06
254
18
18
Biển khơi
Hàm thứ 6 kia ta chỉ cần khai thêm 1 biến sẽ trở thành mạch lạc & tiện dụng hơn nhiều

Thay vì:

Function tnctnet(net, pt, bh)
'Quy doi tu thu nhap sau thue bao gom ca khoan giam tru ra thu nhap chiu thue
If (net > 0) And (net <= (4750000 + 4000000 + pt * 1600000 + bh)) Then
tnctnet = Round((net - 4000000 - pt * 1600000 - bh) / 0.95, 0) + 4000000 + pt * 1600000 + bh
ElseIf (net > (4750000 + 4000000 + pt * 1600000 + bh)) And (net <= (9250000 + 4000000 + pt * 1600000 + bh)) Then
tnctnet = Round((net - 4000000 - pt * 1600000 - bh - 250000) / 0.9, 0) + 4000000 + pt * 1600000 + bh
ElseIf (net > (9250000 + 4000000 + pt * 1600000 + bh)) And (net <= (16050000 + 4000000 + pt * 1600000 + bh)) Then
tnctnet = Round((net - 4000000 - pt * 1600000 - bh - 750000) / 0.85, 0) + 4000000 + pt * 1600000 + bh
ElseIf (net > (16050000 + 4000000 + pt * 1600000 + bh)) And (net <= (27250000 + 4000000 + pt * 1600000 + bh)) Then
tnctnet = Round((net - 4000000 - pt * 1600000 - bh - 1650000) / 0.8, 0) + 4000000 + pt * 1600000 + bh
ElseIf (net > (27250000 + 4000000 + pt * 1600000 + bh)) And (net <= (42250000 + 4000000 + pt * 1600000 + bh)) Then
tnctnet = Round((net - 4000000 - pt * 1600000 - bh - 3250000) / 0.75, 0) + 4000000 + pt * 1600000 + bh
ElseIf (net > (42250000 + 4000000 + pt * 1600000 + bh)) And (net <= (61850000 + 4000000 + pt * 1600000 + bh)) Then
tnctnet = Round((net - 4000000 - pt * 1600000 - bh - 5850000) / 0.7, 0) + 4000000 + pt * 1600000 + bh
ElseIf (net > (61850000 + 4000000 + pt * 1600000 + bh)) Then
tnctnet = Round((net - 4000000 - pt * 1600000 - bh - 9850000) / 0.65, 0) + 4000000 + pt * 16000000 + bh
End If
End Function


Ta viết:

Option Explicit
Const Tr As Single = 10 ^ 6
Function TNCTNet(Net As Double, Pt As Byte, BH As Double) As Double
'Quy doi tu thu nhap sau thue bao gom ca khoan giam tru ra thu nhap chiu thue
Dim PT_BH As Double

Net = Net / Tr
PT_BH = 4 + Pt * 1.6 + BH

If (Net > 0) And (Net <= (4.75 + PT_BH)) Then
TNCTNet = (Net - PT_BH) / 0.95 + PT_BH
ElseIf (Net > (4.75 + PT_BH)) And (Net <= (9.25 + PT_BH)) Then
TNCTNet = (Net - PT_BH - 0.25) / 0.9 + PT_BH
ElseIf (Net > (9.25 + PT_BH)) And (Net <= (16.05 + PT_BH)) Then
TNCTNet = (Net - PT_BH - 0.75) / 0.85 + PT_BH
ElseIf (Net > (16.05 + PT_BH)) And (Net <= (27.25 + PT_BH)) Then
TNCTNet = (Net - PT_BH - 1.65) / 0.8 + PT_BH
ElseIf (Net > (27.25 + PT_BH)) And (Net <= (42.25 + PT_BH)) Then
TNCTNet = (Net - PT_BH - 3.25) / 0.75 + PT_BH
ElseIf (Net > (42.25 + PT_BH)) And (Net <= (61.85 + PT_BH)) Then
TNCTNet = (Net - PT_BH - 5.85) / 0.7 + PT_BH
ElseIf (Net > (61.85 + PT_BH)) Then
TNCTNet = (Net - PT_BH - 9.85) / 0.65 + PT_BH
End If
TNCTNet = Round(TNCTNet, 6) * Tr
End Function
:cool2:
 
S

SA_DQ

Thành viên Cố vấn - Webketoan Mentors
29/6/05
569
100
43
66
HCM city
Ba hàm tự tạo 4=>6 ta có thể gộp chung thành 1

Mình nghĩ sẽ gộp được; Nhưng khi tính từng hàm riêng rẽ để đối chiếu, mình thấy hàm thứ 5 kết quả thật nghi ngờ (Hay do ngoại đạo nên thấy vậy?)

Bạn nào trong ngành, khẳng định lại xem hàm thứ 5 là chính xác 100% chứ?!


To SMOD:
Sao mình định đưa file excel ~70K mà không đưa lên được?
:biggthump
 
mrhung

mrhung

Nguyễn Trọng Hùng
23/4/08
339
19
18
Hà Giang
webketoan.vn
Hôm trước tôi down về chạy thấy rất ngon lành, nhưng tháng này mở ra để làm thì cột thuế thuế nhập cá nhân thấy toàn ?NAME# ko hiểu sao nữa, có phải virut ăn mất CODE rồi ko? Bác nào biết sử lý vui lòng chỉ giúp?
 
T

TruongNhuAnh

Guest
25/12/08
5
0
0
Hưng yên
Anh Vũ Mạnh Trường ơi! gửi cho em file excel về phần thuế TNCN này được ko ạ? mail của em là: hue.ocean@gmail.com. Em cảm ơn anh rất nhìu nhìu nhá
 
H

huechi89

Sơ cấp
10/5/09
18
0
0
44
Ha noi
ôi, nhìn chóng mặt quá. Mình làm bằng phần mềm nhưng thi thoảng cũng muốn tìm hiểu thêm về EX, mà nhìn thôi như này thì không ổn, tại mình không hay đụng tới nó mà, quên luôn thôi.
 
H

honghanh85

Trung cấp
20/12/07
50
0
0
VN
Anh Vũ Mạnh Trường gửi cho em một file tính thuế TNCN theo địa chỉ này nhé: anje1210@yahoo.com . Em cảm ơn nhé.
 
D

dolananh07

Guest
9/7/09
1
0
1
47
haiphong
Cám ơn anh Vũ Mạnh Trường, anh cho em xin 1file tính thuế TNCN vào d/chỉ này: dolananh0609@gmail.com[/COLOR]
 
Dangthaituan_82

Dangthaituan_82

Trung cấp
25/3/06
65
4
0
42
Hải Phòng
em nhìn mà rối hết cả con mắt các bác ạ. Code gì mà các bác cứ sửa đi sửa lại làm cho em choáng váng. Kiểu này em cứ làm trên EX thôi. Thanks các bác nhiều nha.:wall:
 

Xem nhiều

Webketoan Zalo OA