Thân nhờ anh chị giúp Công thức tính lương theo bậc thời gian (1 người xem)

Liên hệ QC

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

tranxuanbao121186

Thành viên mới
Tham gia
30/10/18
Bài viết
16
Được thích
6
Mình có file dữ liệu cột từ tháng đến tháng là một khoảng thời gian. Các bạn có thể giúp mình công thức tính thành tiền là số tháng x mức lương, nhưng mà mức lương của mình có nhiều giai đoạn, mình có ghi trong file dữ liệu như phía dưới. Các bạn có thể dùng hàm giúp mình tách từ tháng đến tháng thành nhiều giai đoạn để tính với ạ
7/2013 đến 4/2016
1150000​
5/2016 đến 6/2017
1210000​
7/2017 đến 6/2018
1300000​
7/2018 đến 6/2019
1390000​
7/2019 đến 12/2019
1490000​
 

File đính kèm

Lần chỉnh sửa cuối:
Tiêu đề như vậy là phạm lỗi "tiêu đề chung chung"
Bạn cần đổi lại là "Công thức tính lương theo bậc thời gian"
 
Mình có file dữ liệu cột từ tháng đến tháng là một khoảng thời gian. Các bạn có thể giúp mình công thức tính thành tiền là số tháng x mức lương, nhưng mà mức lương của mình có nhiều giai đoạn, mình có ghi trong file dữ liệu như phía dưới. Các bạn có thể dùng hàm giúp mình tách từ tháng đến tháng thành nhiều giai đoạn để tính với ạ
7/2013 đến 4/2016
1150000​
5/2016 đến 6/2017
1210000​
7/2017 đến 6/2018
1300000​
7/2018 đến 6/2019
1390000​
7/2019 đến 12/2019
1490000​
Tạo các mốc thời gian (tháng) như cột H file đính kèm, thử:
Mã:
F5=SUMPRODUCT(LOOKUP(EDATE(C5,ROW(INDIRECT("1:"&E5))-1),$H$5:$H$9,$I$5:$I$9))
Enter, fill xuống.

Thân
 

File đính kèm

Em sửa rồi ạ, anh giúp em với :)

Có ngừoi giúp rồi (bài #4). Khoẻ.

Tuy nhiên, thể thoe yêu cầu, tôi khuyến mãi hàm UDF.

Dữ liệu bạn sắp xếp như thế rất khó cho công thức.
Tuy rằng tôi tin ở đây có nhiều bạn viết công thức khủng giải quyết mọi vấn đề. Nhưng đó không phải là giải pháp lâu dài. Công thức khủng rất khó hiểu và khó chỉnh sửa.
Nếu file bạn chịu thêm vài cột nữa, những cột này sẽ tính số lương theo từng giai đoạn. Và cuối cùng là cột tổng thì công thức tương đối dễ và mạch lạc. Bảng tính dễ hiểu.

Nếu bạn không muốn thêm cột thì tôi chỉ có thể giúp hàm UDF tính thẳng. Đây là giải thuật căn bản cho con tính theo bậc.

Function LuongTrongKhoang(ByVal Luong As Double, ByVal KhoangBD As Lo, ByVal As KhoangKT As Integer, ByVal ThangBD As Integer, ByVal ThangKT As Integer) As Double
' hàm tính lương trả trong khoảng tháng làm việc
' Luong: bậc lương cho khoảng tháng
' KhoangBD, KhoangKT: tháng bắt đầu và kết thúc của khoảng, dạng yyyymm (không phải date)
' ThangBD, ThangKT: tháng bắt đầu và kết thúc của công nhân, dạng yyyymm (không phải date)
' hàm chỉ tính số lương được lãnh theo khoảng. Để tính được tổng lương thì gọi hàm này, và tổng từng khoảng
If ThangBD > KhoangKT OR ThangKT < KhoangBD Then Exit Function ' không có lương trong khoảng này
If ThangBD < KhoangBD Then ThangBD = KhoangBD
If ThangKT > KhoangKT Then ThangKT = KhoangKT
LuongTrongKhoang = Luong * (((ThangKT \ 100) * 12 + (ThangKT Mod 100)) - ((ThangBD \ 100) * 12 + (ThangBD Mod 100)) + 1)
End Function

Function TongLuong(ByVal ThangBD As Date, ByVal ThangKT As Date) As Double
' hàm tính tổng lương theo từng bậc lương tháng
' ThangBD, ThangKT: tháng bắt đầu và kết thúc của công nhân, dạng date
' trong hàm có hardcode sẵn array diễn tả bậc lương
' Nếu bậc lương hay thay đổi thì phải thêm code đọc bậc lương từ sheet
Dim a1, a2
Dim tBD As Integer, tKT As Integer, i As Integer
' note: since a1 represents boundaries and a2 intervals, a1 is one longer than a2
a1 = Array( 201307, 201605, 201707, 201807, 201907, 201912, 203012 )
a2 = Array( 1150000, 1210000, 1300000, 1390000, 1490000, 0 )
For i = LBound(a2) To UBound(a2)
TongLuong = TongLuong + LuongTrongKhoang( a2(i), a1(i), a1(i+1)-1, Val(Format(ThangBD, "yyyymm")), Val(Format(ThangKT, "yyyymm")) )
Next i
End Function
 
mình nhìn công thức nghiên cứu mà cũng chưa hiểu nổi @VetMini . Cái bạn chỉ mình cũng khó hiểu quá. Bạn có thể điều chỉnh file dữ liệu thế nào để tính cho công thức dễ hiểu ko bạn. Chủ yếu là từ tháng đến tháng, mình không tách ra nhiều giai đoạn được
 
mình nhìn công thức nghiên cứu mà cũng chưa hiểu nổi
Chuyện thường tình mà bạn! cái gì chưa hiểu thì thấy nó dị thường, cao siêu, khủng. Nhưng một khi bạn hiểu nó rồi thì thấy nó bình dịtiện dùng. Trong Excel, dùng hàm - công thức, hay dùng dụng cụ có sẵn như Pivot Table, Conditional Formatting, Advanced, Solver...., hay phải dùng sự hỗ trợ của VBA..., mỗi phương án đều có hai mặt: ưu và nhược, do đó không thể nói rằng phương án này hơn hẵn phương án kia, chỉ tùy theo trường hợp bài toán mà bạn sẽ phải dùng phương án nào là phù hợp nhất, và bài toán còn phụ thuộc buộc phải xử lý theo khả năng bạn có và ý muốn chủ quan của bạn: thích hay không thích nữa...

Công thức tại bài #4 cũng dùng các công thức cơ bản có sẵn của anh Bill mà tạo nên, chỉ có chỗ bạn 'chưa hiểu' là cách nó gom gọn các tháng trong 1 mảng thôi! còn giải thuật nó rất là bình dị, như tôi ví dụ dưới đây:

Ví dụ: giải thích kết quả của ô F6 (file đính kèm ở trên).
1/ Liệt kê chi tiết các tháng của nhân viên "Từ tháng năm" (cột C), "Đến tháng năm" (cột D):
Cụ thể từ 10/2017 đến 01/2019, thì hàm =EDATE(C6,ROW(INDIRECT("1:"&E6))-1) sẽ tạo trong bộ nhớ một mảng liệt kê ra chi tiết: "10/2017; 11/2017; 12/2017; 01/2018;.....; 01/2019" (Xem thêm công thức thuyết minh trong file: K4: K19 và L4: L19).
2/ Tìm giá trị tương ứng so khớp với bảng liệt kê 'bậc lương theo thời gian' (H5: I9 file đính kèm):
Đây là bài toán 'cơ bản' bạn cũng đã biết rồi: là chức năng của các hàm của Excel: Vlookup(), Hlookup(), Match(), Lookup(). Ở đây, tôi chọn hàm Lookup(), vì nó đã có khung thời gian so khớp là H5: H9, và giá trị tương ứng để trả kết quả là I5: I9.​
3/ Cộng các kết quả sau khi tìm được
Dùng hàm Sumproduct( <mảng kết quả> )​
Mặt ưu của công thức này thì chắc bạn đã 'thưởng thức' rồi :-). Còn về mặt nhược thì nó rất kỵ mảng lớn, nhưng tôi chắc rằng: làm sao có chuyện nhân viên nào đó làm được 50 năm, hay bằng 600 tháng!? Tuy nhiên, nếu công ty bạn có số nhân viên trên 1000 người thì mới là điều ngại, vì công thức mảng này sẽ ảnh hưởng đến tốc độ xử lý máy.

Nếu, có việc bổ sung khung lương theo đoạn thời gian thêm thì bạn chỉ cần liệt kê vào bảng H5: Ixx và điều chỉnh vào hàm Lookup(...., $H$5: $H$xx, $I$5: $I$xx) chắc không đến nỗi làm khó cho bạn, phải không!

Thân
 

File đính kèm

Chuyện thường tình mà bạn! cái gì chưa hiểu thì thấy nó dị thường, cao siêu, khủng. Nhưng một khi bạn hiểu nó rồi thì thấy nó bình dịtiện dùng. Trong Excel, dùng hàm - công thức, hay dùng dụng cụ có sẵn như Pivot Table, Conditional Formatting, Advanced, Solver...., hay phải dùng sự hỗ trợ của VBA..., mỗi phương án đều có hai mặt: ưu và nhược, do đó không thể nói rằng phương án này hơn hẵn phương án kia, chỉ tùy theo trường hợp bài toán mà bạn sẽ phải dùng phương án nào là phù hợp nhất, và bài toán còn phụ thuộc buộc phải xử lý theo khả năng bạn có và ý muốn chủ quan của bạn: thích hay không thích nữa...

Công thức tại bài #4 cũng dùng các công thức cơ bản có sẵn của anh Bill mà tạo nên, chỉ có chỗ bạn 'chưa hiểu' là cách nó gom gọn các tháng trong 1 mảng thôi! còn giải thuật nó rất là bình dị, như tôi ví dụ dưới đây:

Ví dụ: giải thích kết quả của ô F6 (file đính kèm ở trên).
1/ Liệt kê chi tiết các tháng của nhân viên "Từ tháng năm" (cột C), "Đến tháng năm" (cột D):
Cụ thể từ 10/2017 đến 01/2019, thì hàm =EDATE(C6,ROW(INDIRECT("1:"&E6))-1) sẽ tạo trong bộ nhớ một mảng liệt kê ra chi tiết: "10/2017; 11/2017; 12/2017; 01/2018;.....; 01/2019" (Xem thêm công thức thuyết minh trong file: K4: K19 và L4: L19).
2/ Tìm giá trị tương ứng so khớp với bảng liệt kê 'bậc lương theo thời gian' (H5: I9 file đính kèm):
Đây là bài toán 'cơ bản' bạn cũng đã biết rồi: là chức năng của các hàm của Excel: Vlookup(), Hlookup(), Match(), Lookup(). Ở đây, tôi chọn hàm Lookup(), vì nó đã có khung thời gian so khớp là H5: H9, và giá trị tương ứng để trả kết quả là I5: I9.​
3/ Cộng các kết quả sau khi tìm được
Dùng hàm Sumproduct( <mảng kết quả> )​
Mặt ưu của công thức này thì chắc bạn đã 'thưởng thức' rồi :). Còn về mặt nhược thì nó rất kỵ mảng lớn, nhưng tôi chắc rằng: làm sao có chuyện nhân viên nào đó làm được 50 năm, hay bằng 600 tháng!? Tuy nhiên, nếu công ty bạn có số nhân viên trên 1000 người thì mới là điều ngại, vì công thức mảng này sẽ ảnh hưởng đến tốc độ xử lý máy.

Nếu, có việc bổ sung khung lương theo đoạn thời gian thêm thì bạn chỉ cần liệt kê vào bảng H5: Ixx và điều chỉnh vào hàm Lookup(...., $H$5: $H$xx, $I$5: $I$xx) chắc không đến nỗi làm khó cho bạn, phải không!

Thân
Đọc giải thích thấy nó rắc rối bỏ xừ, viết vài dòng code cho xong
Chuoi hột khô của tui ngâm "dụ" chưa bồ tèo, hết dịch....chơi

Thân
 
Đọc giải thích thấy nó rắc rối bỏ xừ, viết vài dòng code cho xong
Chuoi hột khô của tui ngâm "dụ" chưa bồ tèo, hết dịch....chơi

Thân
Tha lỗi cho em anh Cò ơi!

Em mang chai "dụ" của anh qua gặp "Trum" giới thiệu với "hén" là "Thuốc trị bá bệnh", thay vì bỏ "đó lờ" mua thuốc ký ninh, thì mua chai này giá "phải chăng" hơn. "Hén" nghe vậy mừng quá lo nốc trước và "hết chơn hết chọi dzồi", nhờ đó khi kiểm tra sức khỏe "hén" mới không bị dương tính đó.

Đừng buồn và giận em, khi nào em về cố hương, sẽ mang "thền" anh chai "dụ" khác nhen!

Chúc anh và anh em ngày thiệt vui.
/-*+//-*+//-*+/
 
Web KT

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

Back
Top Bottom