Giúp em công thức tính lương cho NV (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

ngocvasat

Thành viên mới
Tham gia
18/4/07
Bài viết
9
Được thích
6
Các cao thủ giúp mình lọc file để làm căn cứ tính lương cho nhân viên nhé.

Hàng tháng mình download trên hệ thống về file mà nhân viên thu được để làm căn cứ tính lương cho họ.

Đây là bảng số liệu họ thu theo hợp đồng và căn cứ vào số hợp đồng họ thu được để tính lương cho họ trong đó có 3 hình thức thu là:
1. TT thu được của khách hàng giao trong kỳ.
2. KH nộp cho đối tượng khác.
3. Thu được của khách hàng không giao trong kỳ.
Vì mối hình thức thu trên được hưởng số tiền khác nhau.trên một hợp đồng.
Trong đó một hợp đồng có thể thu nhiều lần trong tháng (vì mỗi lần thu khách hàng trả một ít) nhưng chỉ được tính lương cho 01 hợp đồng./ 1 hình thức thu/ 01 nhân viên.

Ví dụ: một hợp đồng A nhân viên C thu trong tháng 03 lần thuộc hình thức thu là “TT Thu được của khách hàng giao trong kỳ” nhưng vẫn chưa đủ và nhân viên D thu được 1 lần của khách hàng này thì thuộc hình thức thu là: “ thu được của khách hàng không giao trong kỳ” thì tháng đó nhân viên C được tính là thu được 01 hợp đồng, và nhân viên D cũng được tính là thu được 01 hợp đồng.
 

File đính kèm

Mình nhờ hàm DCOUNTA() trong macro để tính

Bạn xem kết quả bên trang 'GPE' sau khi chạy macro;

(hú í mình có đổi vị trí cột mã HĐ để loại các HĐ trùng lặp

Bạn kiểm lai xem sao nha
 

File đính kèm

Cám ơn nhiều! nhưng mình chưa hiểu cách làm. bạn hướng dẫn giùm mình với. Làm thể nào để chạy được!
 
Thực hiện các công đoạn sau:

(1) Việc đầu tiên là lập danh sách duy nhứt mã nhân viên tại cột 'M'

(2) (huyển cột Mã HĐ lên đứng đầu;

(3) Thực hiện lọc duy nhứt từ CSDL sang vùng cột G:K;

(4) Thêm 4 dòng vô đầu CSDL để tạo vùng chuẩn cho hàm DCOUNT()

(5) Thiết lập vòng lặp duyệt toàn bộ mã nhân viên

(5.1) Thiết lập thêm vòng lặp để cung cấp các điều kiện KH*, Th* & TT* cho hàm DCOUNT()
Nghĩa là sau vòng lặp trong, ta sẽ có 3 trị từ hàm & cho ghi lại bên 'GPE'

Sau 1 mã nhân viên thì đến mã nhân viên khác theo vòng lặp ngoài.

Thực ra khi có vùng G5:Kx thì ta có thể dùng làm nguồn để tính trên trang tíng êxcel bằng hàm DCOUNT() được rồi.

(*) Fần cuối của macro đã xóa 4 dòng đầu đi rồi; Nếu cần nghiêm cứu kỹ hơn bạn có thể vô hiệu hóa dòng này.

(húc thành đạt!
 
Mình không hiểu VBA mấy. bạn gửi cho mình file chuẩn bạn làm giúp mình với.
mình chưa hiểu từ bước 3 đến bước 5. và đoạn mã.
cám ơn bạn nhiều.

Chào bác SA_DQ.
Cháu chưa hiểu nhiều về VBA. Bác có thể giúp cháu cách lọc duy nhất từ CSDL sang vùng cột G:K?
và cách thiết lập vòng lặp nữa. . Bác làm cho cháu file chuẩn giúp cháu? Cháu cám ơn bán nhiều.
 
Chỉnh sửa lần cuối bởi điều hành viên:
File gỏi kèm rồi thay!

Mình giải thích các dòng lệnh trong macro, nha:
PHP:
Sub GPE()
 '2 dòng lệnh khai báo các biến cần dùng:'
 Dim Sh As Worksheet, WF As Object:                     Dim Jj As Byte
 Dim Cls As Range, Rng As Range, rTD As Range, Clls As Range
 
 On Error Resume Next   'Tránh lỗi khi không có đối tượng để xóa'
'2 dòng lệnh xóa các Names khi lọc:'
 ActiveWorkbook.Names("Criteria").Delete
 ActiveWorkbook.Names("Extract").Delete
 Columns("A:E").Select
'Lọc CSDL sang vùng "G:K"; Bạn xem kết quả vẫn còn trên trang tính.'
 Columns("A:E").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _
    "G1:K1"), Unique:=True
'Như trên đã nêu:'
 ActiveWorkbook.Names("Criteria").Delete
 ActiveWorkbook.Names("Extract").Delete
 On Error GoTo 0
 Columns("B:B").Select
'Lọc duy nhứt DS nhân viên cơ quan đến cột "M"': 
 Columns("B:B").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("M1" _
    ), Unique:=True
'Thêm 4 dòng đầu của trang tính:'
 Rows("1:4").Insert Shift:=xlDown
'2 dòng lệnh tạo vùng chuẩn để hàm DCOUNT() làm việc:'
 [h1].Value = [B5].Value
 [I1].Value = [E5].Value
'Lấy vùng CSDL của hàm DCOUNT() cho vô biến đã khai báo:'
 Set Rng = Range([M6], [M65500].End(xlUp))
 Set Sh = ThisWorkbook.Worksheets("GPE")
'Lấy Vùng "Tiêu chí" cho vô biến vùng:'
 Set rTD = Sh.[B1].Resize(, 3)
'Xóa dữ liệu cũ:'
 rTD.CurrentRegion.Offset(1).ClearContents
'Gán biến đối tượng:'
 Set WF = Application.WorksheetFunction
'Tạo vòng lặp duyệt toàn bộ mã nhân viên CQ:'
 For Each Cls In Rng
'Đưa lần lượt từng mã NV vô vùng chuẩn của hàmCSDL:'
    [h2].Value = Cls.Value
'Tạo vòng lặp 2 để cung cấp dữ liệu cần đếm của hàm nêu trên:'
    For Jj = 1 To 3
'Đưa dữ liệu này vô vùng chuẩn tính toán của hàm:'
        [i2].Value = rTD(Jj).Value
        With Sh.[A65500].End(xlUp).Offset(1)
'Gán mã NV vô dòng cuối chưa có dữ liệu của cột "A" thuộc trang GPE:'
            .Value = Cls.Value
'Gán kết quả tính được lên cùng dòng ở các cột từ B đến D theo vòng lặp:'
            .Offset(, Jj).Value = WF.DCountA([g5].CurrentRegion, [h5], [H1:I2])
        End With
    Next Jj
 Next Cls
'Xóa 4 dòng trên cùng, đưa trang tính về trạng thái đầu macro:'
 Rows("1:4").Delete
 [g1].CurrentRegion.Offset(1).Resize(, 2).ClearContents
End Sub
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom