Tính bậc lương khi có biến động về chức vụ

Liên hệ QC
(1) Áp dụng cho bài toán như trên nhưng bảng LHQ có bổ sung chức vụ KTT, CV1 và bậc lương tối đa tăng từ 11 thành 20 thì nó có đúng không các bác.
(2) Bác ơi cái số 5 là dòng cuối là sao hả bác, em tưởng dòng cuối nơi có 9 bậc lương phải là 6 chứ :-?

(1) Bây giờ đến lượt bạn thử sức chỉnh sửa với sự hướng dẫn từ xa của bọn mình đi; Nếu có vấp cũng chưa đến nổi nào; nhưng nếu làm được sẽ là cái lợi rất lớn sau này.
Bạn thử thêm 1 dòng lương KTT xem sao. Nhưng chú í thứ tự thêm nha.

(2) Dòng lệnh trên dòng nớ đâu có con số 6 nào đâu, Rws chạy từ 0 đến 5 mà.

Sẵn nói luôn, dùng hàm SWITCH() trong trường hợp này cho gọn gàn thôi; chứ viết thế này thì bạn sẽ dễ hiểu ngay:

PHP:
 If ChVu="GD" then
     Rws = 0
 ElseIf ChVu = "PGD" Then
     Rws = 1
 '. . . . . . '
    
 End If

Bạn thấy đó, thay vì hơn chục dòng lệnh, ta có thể viết thành 1 dòng


(3) Còn cái chuyện từ 11 bậc lên 20 bậc, hay các bậc ở các thang lương không giống nhau mình sẽ nghiên cứu & hẹn sẽ trả lời sớm cho bạn.
Thân ái
 
Thực hiện lời hứa với bạn đây

Còn cái chuyện từ 11 bậc lên 20 bậc, hay các bậc ở các thang lương không giống nhau mình sẽ nghiên cứu & hẹn trả lời sớm

Bạn thử vô hiện hóa dòng lệnh này:
Mã:
      Set Rng = Sh.[e18].Offset(Rws).Resize(, 11)

Và Chép thêm dòng lệnh này vô dưới dòng lệnh vừa vô hiệu hóa đó

PHP:
      Set Rng = Sh.Range(Sh.[E18].Offset(Rws), _
         Sh.[E18].Offset(Rws).End(xlToRight).Offset(, 1))

Sau đó bạn thử tăng số bậc lương trong dòng nào đó từ 11 lên đến 20 xem được chưa nha.

Chúc thành công.
 
Mình vừa viết cho bạn hàm người dùng, sẽ tiên dụng hơn cho bạn, chắc vậy

PHP:
Option Explicit
Function BacLuong(ChVuCu As String, BacCu As Byte, ChVuMoi As String)
 Const ChucVu As String = "GD PGDTP CV2NV1NV2"
 Dim TLg As Double, Thang As Boolean
 Dim Rng As Range, Cls As Range
  
 If ChVuCu = "" Or BacCu = 0 Or ChVuMoi = "" Or InStr(ChucVu, ChVuMoi) < 1 Then
   BacLuong = "":                               Exit Function
 End If
 
 Thang = InStr(ChucVu, ChVuMoi) < InStr(ChucVu, ChVuCu)
 If IsNumeric(Right(ChVuCu, 1)) Then ChVuCu = ChVuCu & "_"
 If IsNumeric(Right(ChVuMoi, 1)) Then ChVuMoi = ChVuMoi & "_"
 TLg = Range(ChVuCu).Cells(0).Offset(, BacCu).Value
 Set Rng = Range(ChVuMoi)
 If Thang Then
   If TLg < Rng.Cells(1, 1).Value Then
      BacLuong = 1
   Else
      For Each Cls In Rng
         If Cls.Value <= TLg And Cls.Offset(, 1).Value > TLg Then
            BacLuong = Cls.Column + 1 - Rng.Cells(0).Column
            Exit For
         End If
      Next Cls
   End If
 Else
   For Each Cls In Rng
      If Cls.Value < TLg And (Cls.Offset(, 1) >= TLg Or Cls.Offset(, 1).Value = "") Then
         BacLuong = Cls.Column - Rng.Cells(0).Column
         Exit For
      End If
   Next Cls
 End If
End Function

Xem trong file để hiểu thêm chi tiết
Để thữ hàm , ta có thể nhập vô 2 ô còn trống tại 'AZ'
 

File đính kèm

  • GPE.rar
    21.9 KB · Đọc: 13
@ 2 bác SA_DQ và HYen17: em có áp dụng cách của cả 2 bác vào 2 file khác nhau, trong đó em có bổ sung thêm 2 chức vụ là KTT và CV1. Trong code em cũng tăng theo trật tự như các bác nói nhưng lúc áp dụng thì không thấy nó nhảy đúng, chỗ sai em có bôi màu vàng. Mong các bác giúp em.
 

File đính kèm

  • BacLuong HYen.rar
    21.1 KB · Đọc: 12
  • BacLuong SA_DQ.rar
    22.9 KB · Đọc: 13
Bạn nên chuyển sang xài hàm tư tạo đi; dễ bảo trì & chỉnh sửa

Nhưng muốn vậy bạn cần thực hiện tiếp các việc sau:

(*) Bạn còn thiếu các name cho hàm làm việc. Điều này thể hiện trên trang tính rõ ràng ở 2 ô hàm cho ra kết quả đúng.

Bạn cần có các Name KTT thuộc vùng F20: Z20. (Lấy dư 1 ô sau ô cuối có dữ liệu)
Với CV1 ta fải thêm dấu gạch dưới ( => CV1_) vì ta không thê gán tên là CV1 do nó là 1 địa chỉ ô của excel. Và fải thêm dấu "_" vì trong hàm tự tạo có quy ước chuyện này trong 1 câu lệnh;

(*) Bạn fải sửa lại name CV2_ đã bị làm hư;

Hàm cần có đủ số tên bằng với số dòng có trong bảng tra tiền lương (= 9 như hiện tại)

Mình viết để bạn tự sửa; Có vậy sau này bạn tự thân sẽ vận hành tốt hàm tự tạo khi có những biến động về thang bậc lương.

Hãy chinh fục & sở hữu!
 
Chỉnh sửa lần cuối bởi điều hành viên:
Web KT
Back
Top Bottom