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

Liên hệ QC

tzboy

Thành viên mới
Tham gia
17/4/10
Bài viết
19
Được thích
1
Em hiện đang làm tính bậc lương khi có biến động về chức vụ như từ NV lên TP thì sẽ có bậc lương của TP hoặc từ TP xuống PP thì sẽ nhận bậc lương PP. Nhờ các bác với ạ /-*+/
Trong file em gửi kèm các bác để ý từ cột AM -> AQ nhé. AM là chức vụ lần 1, AO là bậc lương quy ra của lần 1.
- Khi có biến động lần 1 về chức vụ sẽ nằm ở cột AP, vd từ CV2->TP chẳng hạn, khi ấy sẽ xem hiện tại với chức vụ CV2 thì bậc lương của họ sẽ là bao nhiêu. Bậc lương đấy sẽ tương ứng với số lương bao nhiêu bên sheet Bang LHQ, trong vd của em là với CV2 bậc 2 sẽ có lương là 2tr4. Vậy khi họ được lên chức từ CV lên TP thì họ sẽ được nhận số lương của TP cao hơn số lương CV hiện tại của họ, ở đây lương TP sẽ là 3tr và bậc lương khi ấy sẽ là bậc 1. Như vậy khi nhân viên này chuyển từ CV2 bậc lương 2 lên TP sẽ được nhận lương bậc 1 của TP, nếu đang là CV2 bậc lương 6 khi lên TP sẽ có bậc lương là 3.

Vậy em muốn hỏi có công thức nào để làm cái này tự động không ạ? Tức là khi có biến động về chức vụ thì em chỉ cần nhập vào ô chức vụ của họ thì ô Bậc lương trong mục Ánh xạ chuyển ngạch lần x sẽ tự động nhảy đến bậc lương của chức vụ tương ứng nhưng sẽ cao hơn hoặc thấp hơn so với lương quy ra bậc hiện tại của họ.

Em giải thích có thể hơi khó hiểu, mong các bác thông cảm.
 

File đính kèm

  • Luong.xls
    56 KB · Đọc: 88
Mình xem vài lần rồi, nhưng vẫn có vấn đề cần hỏi cụ thể hơn, như sau

Trường hợp ô. B (dòng 8) Hiện tại là PGD bậc 11;
Nếu ai đó nhập vô [D8] chức danh là GD, thì có fải bạn muốn xuất hiệt tự động ở [Az8] chuỗi "GD" & ở ô liền kề bên fải nó là con số 5 tròn trịa không nào;

Tương tự dòng 10 với Anh/chị M: hiện đang là NV1 bậc 3;
Nếu ta nhập vô [D10] chuỗi "CV2" thì tại [AP] sẽ fải có "CV2" & ô kề fải ngay sau nó là con số 2

(*) Không dám lấy dòng 9 làm ví dụ vì [D9] đang là CV2, nhưng cột áp chót cùng dòng lại là "NV"

Vấn đề nữa là bạn còn muốn tự động thay chổ nào nữa không, ví như 2 cột cuối của bảng.

Sẵn lòng giúp bạn, một khi hiểu được những vấn đề đang quan tâm

Thân ái & chờ tin bạn.
 
Đầu tiên em xin cảm ơn bác đã trả lời bài của em }}}}}

Sau là em xin trả lời câu hỏi của bác ạ:
Trường hợp ô. B (dòng 8) Hiện tại là PGD bậc 11;
Nếu ai đó nhập vô [D8] chức danh là GD, thì có fải bạn muốn xuất hiệt tự động ở [Az8] chuỗi "GD" & ở ô liền kề bên fải nó là con số 5 tròn trịa không nào;
Tương tự dòng 10 với Anh/chị M: hiện đang là NV1 bậc 3;
Nếu ta nhập vô [D10] chuỗi "CV2" thì tại [AP] sẽ fải có "CV2" & ô kề fải ngay sau nó là con số 2

(*) Không dám lấy dòng 9 làm ví dụ vì [D9] đang là CV2, nhưng cột áp chót cùng dòng lại là "NV"
Bác hiểu quá chuẩn rồi ạ, nhưng ở đây em không muốn nhập vào ở ô D8 mà em muốn nhập vào 1 trong các ô AP8, AU8 và AZ8 bác ạ. Và 1 trong các ô ngay bên cạnh 3 ô đấy (AQ8, AV8, BA8) nó cũng sẽ nhảy ra các giá trị tương ứng là bậc lương lớn hơn và gần nhất so với bậc lương hiện tại.

Là em muốn công thức ở mấy cột được bôi màu đỏ ý bác.

Vấn đề nữa là bạn còn muốn tự động thay chổ nào nữa không, ví như 2 cột cuối của bảng.
2 cột cuối của bảng thì cảm ơn bác đã quan tâm nhưng hiện tại thì em không cần ạ.

Mong sớm nhận đựơc hồi âm của bác.
 
Bạn thử kiểm xem còn khuyết tật nào không

PHP:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
 Const Chuoi As String = "GD PGDTP CV2NV1NV1"
 Const SySo As Byte = 99               ' Tong Só Nguòi Trong Co Quan'
 If Not Intersect(Target, Union(Range("AP8:AP" & SySo), Range("Au8:AU" & SySo), _
   Range("AZ8:Az" & SySo))) Is Nothing Then
   Dim Sh As Worksheet, Cls As Range, Rng As Range
   Dim ChVu As String, CVuM As String:       Dim Thang As Boolean
   Dim Rws As Long, Bac As Byte, TLg As Double
   
   ChVu = Cells(Target.Row, "BE").Value:     Bac = Cells(Target.Row, "BF").Value
   CVuM = Target.Value:                      Set Sh = Sheets("Bang LHQ")
   If InStr(Chuoi, CVuM) < InStr(Chuoi, ChVu) Then Thang = True
   Rws = Switch(ChVu = "GD", 0, ChVu = "PGD", 1, ChVu = "TP", 2 _
      , ChVu = "CV2", 3, ChVu = "NV1", 4, ChVu = "NV2", 5)
   TLg = Sh.[e18].Offset(Rws, Bac).Value
   Rws = Switch(CVuM = "GD", 0, CVuM = "PGD", 1, CVuM = "TP", 2 _
      , CVuM = "CV2", 3, CVuM = "NV1", 4, CVuM = "NV2", 5)
      Set Rng = Sh.[e18].Offset(Rws).Resize(, 11)
   If Thang Then
      For Each Cls In Rng
         If (Cls.Value < TLg And Cls.Offset(, 1).Value > TLg) _
            Or (Cls.Value > TLg And Cls.Column = 6) Then
            Target.Offset(, 1).Value = Sh.Cells(17, Cls.Column + 1).Value
         End If
      Next Cls
   Else
      For Each Cls In Rng
         If (Cls.Value < TLg And Cls.Offset(, 1).Value > TLg) _
            Or (Cls.Value < TLg And Cls.Offset(, 1).Value = "") Then
            Target.Offset(, 1).Value = Sh.Cells(17, Cls.Column).Value
         End If
      Next Cls
   End If
 End If
End Sub
 

File đính kèm

  • GPE.rar
    21.3 KB · Đọc: 51
Bác ơi em vẫn không thấy chỗ Bậc lương trong phần Ánh xạ chuyển ngạch nó nhảy khi mình thay đổi chức vụ cho nhân viên bác ạ.
Ngoài ra em muốn hỏi thêm bác là: mình có thể dùng công thức cho ánh xạ chuyển ngạch thay vì dùng code được không bác :D
 
(1) Bác ơi em vẫn không thấy chỗ Bậc lương trong phần Ánh xạ chuyển ngạch nó nhảy khi mình thay đổi chức vụ cho nhân viên bác ạ.
(2) Em muốn dùng công thức cho ánh xạ chuyển ngạch thay vì dùng code được không bác :D

(1) Mình đã sửa lỗi ở dòng lệnh được đánh số 1 & bổ sung các câu lệnh trong đoạn được đánh số từ 2 đến 3 & tư 4 đến 5:
PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
1 Const Chuoi As String = "GD PGDTP CV2NV1NV2"                  '<=|'
 Const SySo As Byte = 99               ' Tong Só Nguòi Trong Co Quan'
 If Not Intersect(Target, Union(Range("AP8:AP" & SySo), Range("Au8:AU" & SySo), _
   Range("AZ8:Az" & SySo))) Is Nothing Then
   Dim Sh As Worksheet, Cls As Range, Rng As Range
   Dim ChVu As String, CVuM As String:       Dim Thang As Boolean
   Dim Rws As Long, Bac As Byte, TLg As Double
   
   ChVu = Cells(Target.Row, "BE").Value:     Bac = Cells(Target.Row, "BF").Value
   CVuM = Target.Value:                      Set Sh = Sheets("Bang LHQ")
   If InStr(Chuoi, CVuM) < InStr(Chuoi, ChVu) Then Thang = True
   Rws = Switch(ChVu = "GD", 0, ChVu = "PGD", 1, ChVu = "TP", 2 _
      , ChVu = "CV2", 3, ChVu = "NV1", 4, ChVu = "NV2", 5)
   TLg = Sh.[e18].Offset(Rws, Bac).Value
   Rws = Switch(CVuM = "GD", 0, CVuM = "PGD", 1, CVuM = "TP", 2 _
      , CVuM = "CV2", 3, CVuM = "NV1", 4, CVuM = "NV2", 5)
      Set Rng = Sh.[e18].Offset(Rws).Resize(, 11)
   If Thang Then
      For Each Cls In Rng
2         If Cls.Column = 6 And Cls > TLg Then
            Target.Offset(, 1).Value = 1:       Exit For
         ElseIf Cls.Value < TLg And Cls.Offset(, 1).Value > TLg Then
            Target.Offset(, 1).Value = Sh.Cells(17, Cls.Column + 1).Value
3            Exit For
         End If
      Next Cls
   Else
      For Each Cls In Rng
4         If Cls.Value < TLg And Cls.Offset(, 1).Value = "" Then
            Target.Offset(, 1).Value = Sh.Cells(17, Cls.Column).Value
            Exit For
         ElseIf Cls.Value < TLg And Cls.Offset(, 1).Value > TLg Then
            Target.Offset(, 1).Value = Sh.Cells(17, Cls.Column).Value
5            Exit For
         End If
      Next Cls
   End If
 End If
End Sub

Bạn chép đè lên macro cũ & thử lại giúp nha.

(2) Công thức í à, việc này bạn fải chờ các nhà siêu công thức trên GPE.COM thôi; Với việc này mình có khi còn tê hơn cả bạn nữa ấy chứ !

Chúc vui cuối tuần!
 
Bác ơi, 1 số t/h thì marco chạy đúng còn 1 số lại không đúng bác ạ. VD:
- Nhân viên đầu tiên khi nhập là TP không hiểu sao vẫn bậc lương là 9 trong ánh xạ, trong khi đúng của nó là bậc lương 1.
- Nhân viên thứ 2 khi lên CV2 thì bậc lương sẽ là 2 nhưng nó lại nhảy thành 3.

Bác kiểm tra lại giúp em bác nhé.
 
Bạn thêm 2 dấu '=' vô 2 dòng lệnh được đánh số & thử giúp nha

PHP:
   If Thang Then
      For Each Cls In Rng
         If Cls.Column = 6 And Cls > TLg Then
            Target.Offset(, 1).Value = 1:       Exit For
1         ElseIf Cls.Value <= TLg And Cls.Offset(, 1).Value > TLg Then
            Target.Offset(, 1).Value = Sh.Cells(17, Cls.Column + 1).Value
            Exit For
         End If
      Next Cls
   Else
      For Each Cls In Rng
         If Cls.Value < TLg And Cls.Offset(, 1).Value = "" Then
            Target.Offset(, 1).Value = Sh.Cells(17, Cls.Column).Value
            Exit For
2         ElseIf Cls.Value < TLg And Cls.Offset(, 1).Value >= TLg Then
            Target.Offset(, 1).Value = Sh.Cells(17, Cls.Column).Value
            Exit For
         End If
      Next Cls
   End If
 End If
End Sub
 
Em đã thêm dấu = vào đúng chỗ bác chỉ nhưng nó vẫn nhảy không đúng bác ạ :(
 
Có mấy vấn đề cần bàm lại, như sau

Em đã thêm dấu = vào đúng chỗ bác chỉ nhưng nó vẫn nhảy không đúng bác ạ :(

(*) Số liệu trong trang 'Bang LHQ' ở dòng 19 không tăng dần đều như các dòng khác;

(*) Để macro nạp dữ liệu đúng thì cần biết bậc lương & chức vụ trước lúc chỉnh lương; Macro trên đã trưng dụng 2 cột cuối để làm số liệu cơ sở để tìm kiếm số liệu mới bên trang "Bang LHQ'
Như vậy số liệu 2 cột này không thể còn là công thức được nữa, mà là các hằng số.

(*) Như vậy để thử tiếp số liệu thì bạn cần sửa dòng 19 & nhập số liệu "tỉnh" vô 2 cột cuối.
Nếu không có bậc lương cũ thì sao có thể tìm ra tiền lương cũ đã nhận được là bao nhiêu. Mà không có số tiền thì tìm đâu để ra bậc lương mới sau điều chỉnh.

(Mình sẵn lòng mời hẵn bữa nhậu nếu bạn gì đó làm ra kết quả từ công thức! Khà, khà,. . . )
 
(*) Số liệu trong trang 'Bang LHQ' ở dòng 19 không tăng dần đều như các dòng khác;

(*) Để macro nạp dữ liệu đúng thì cần biết bậc lương & chức vụ trước lúc chỉnh lương; Macro trên đã trưng dụng 2 cột cuối để làm số liệu cơ sở để tìm kiếm số liệu mới bên trang "Bang LHQ'
Như vậy số liệu 2 cột này không thể còn là công thức được nữa, mà là các hằng số.

(*) Như vậy để thử tiếp số liệu thì bạn cần sửa dòng 19 & nhập số liệu "tỉnh" vô 2 cột cuối.
Nếu không có bậc lương cũ thì sao có thể tìm ra tiền lương cũ đã nhận được là bao nhiêu. Mà không có số tiền thì tìm đâu để ra bậc lương mới sau điều chỉnh.

(Mình sẵn lòng mời hẵn bữa nhậu nếu bạn gì đó làm ra kết quả từ công thức! Khà, khà,. . . )
Cảm ơn bác, em làm theo hướng dẫn của bác và đã thấy nó nhảy ra KQ đúng.
Nhưng có 1 vấn đề ở đây là em không muốn thay đổi dữ liệu 2 cột cuối, em muốn dữ liệu 2 cột đấy giữ nguyên, có thế nào thì để nó thế. Vậy có cách nào mà không cần sửa dữ liệu 2 cột cuối, chỉ cần sửa ở các cột CV mà BL nó cũng nhảy theo không ạ?
 
Vậy cần lấy bậc lương cũ (trước khi chuyển ngạch ) ở nơi mô?

Vì trên toàn dòng chỉ có cột cuối nớ có bậc lương mà thôi; Còn chức vụ cũ ta có thể lấy ở cột 'D'

OK chưa nào anh thân mến?
 
Đâu phải chỉ có cột cuối mới có bậc lương đâu bác, các cột AO-AT-AY và BD cũng có giá trị là bậc lương mà.
 
Vậy là cuối cùng chúng ta cũng đến 1 thỏa thuận:

Các cột AO-AT-AY và BD cũng có giá trị là bậc lương mà.

Như vậy nếu ta nhập dữ liệu vô cột 'AP' thì lấy chức vụ cũ khi chưa chuyển ngạch là cột 'AM' & tương đương như vậy với cột 'AU' => 'AR" & 'AZ' => 'AW'

Còn bậc lương cũ thì lấy ngay ô bên trái liền kề.


Nếu đúng vậy thì chỉ đổi 1 dòng lệnh ngay sau các dòng khai báo biến, như sau:

Dòng cũ gồm 2 câu lệnh
Mã:
[COLOR="Lime"][SIZE="4"]'[/SIZE]  ChVu = Cells(Target.Row, "BE").Value:     Bac = Cells(Target.Row, "BF").Value[/COLOR]

Ta vô hiệu hóa dòng àny bằng dấu nháy đơn (như trên)

Và thay vào đó là dòng lệnh:

PHP:
 ChVu = Target.Offset(, -3).Value:            Bac = Target.Offset(, -1).Value

Chờ ý kiến cũng như kết quả thử nghiệm từ bạn.
 
Em cảm ơn bác rất nhiều, chạy rất đúng rồi ạ.
Nhưng có 1 vấn đề phát sinh thế này, mong bác giúp em với là hoàn thiện ạ. Em xin đưa ra ví dụ luôn:
- Bên LHQ thì NV2 chỉ có lương đến bậc 9 trong khi trong bảng thì có tất cả là 11 bậc lương, nếu NV2 có bậc lương là 10 hoặc 11 (NV2 chỉ có lương đến bậc 9) thì khi có biến động (lên NV1 chẳng hạn) thì em muốn bậc lương NV1 khi ấy sẽ là bậc 5 (tức là sẽ lấy giá trị cuối cùng và cao nhất của bậc lương hiện tại của nhân viên trong trường hợp nhân viên đó được tăng vượt số bậc quy định).
Trong file đính kèm chính là chỗ em bôi màu xanh bên sheet DLCN ạ.
 

File đính kèm

  • BacLuong.xls
    74.5 KB · Đọc: 14
Nhưng có 1 vấn đề phát sinh thế này, mong bác giúp em với. ví dụ:
- Bên LHQ thì NV2 chỉ có lương đến bậc 9 trong khi trong bảng thì có tất cả là 11 bậc lương, nếu NV2 có bậc lương là 10 hoặc 11 (NV2 chỉ có lương đến bậc 9) thì khi có biến động (lên NV1 chẳng hạn) thì em muốn bậc lương NV1 khi ấy sẽ là bậc 5 (tức là sẽ lấy giá trị cuối cùng và cao nhất của bậc lương hiện tại của nhân viên trong trường hợp nhân viên đó được tăng vượt số bậc quy định).
Mình đưa ra ba cách giải quyết, tùy bạn lựa chọn cho thuận tiên nhất:

Fương án 1: Tại hai ô đang trống trong bảng tra, bạn thiết lập công thức =[N23]
(Tạm gọi là fương án đánh lừa excel)

Fương án 2: Tại các ô tương tư ô [Ao9] của trang "Du Lieu Ca Nhan" bằng cách nào đó chỉ cho nhập số 9 mà thôi, một khi ô bên trái cách nó 1 ô là NV2
(Cách này có vẻ khó, vì bạn đang cài công thức tính ở cột này)
(Tạn gán tên f ương án này là "Cấm vượt")

Fương án 3: (Xử bằng VBA) Bằng cách thêm dòng lệnh sau

PHP:
   If TLg = 0 And Rws = 5 Then TLg = Sh.[q23].End(xlToLeft).Value
Vô sau dòng (Thêm nha, không fải thay à!)
Mã:
   TLg = Sh.[e18].Offset(Rws, Bac).Value
Chỉ chọn 1 thôi nha, cách nào bạn cho là thuận tiện nhất. Không có cái zụ 3 trong 1 là hổng chịu à!

Chúc thành công.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Cảm ơn các bác rất nhiều, file chạy ngon rồi ạ.
Em xin hỏi thêm nếu sau này áp dụng đoạn code VBA trên vào t/h tương tự nhưng bậc lương và chức vụ nhiều hơn thì có cần sửa gì ở trong code không ạ?
 
Trước hết fải chú í đến các dòng lệnh có đánh số như dưới đây

PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
1 Const Chuoi As String = "GD PGDTP CV2NV1NV2"                  '<=|'
 Const SySo As Byte = 99               ' Tong Só Nguòi Trong Co Quan'
 If Not Intersect(Target, Union(Range("AP8:AP" & SySo), Range("Au8:AU" & SySo), _
   Range("AZ8:Az" & SySo))) Is Nothing Then
   Dim Sh As Worksheet, Cls As Range, Rng As Range
   Dim ChVu As String, CVuM As String:       Dim Thang As Boolean
   Dim Rws As Long, Bac As Byte, TLg As Double
   
   ChVu = Target.Offset(, -3).Value:            Bac = Target.Offset(, -1).Value
   CVuM = Target.Value:                         Set Sh = Sheets("Bang LHQ")
   
   Thang = InStr(Chuoi, CVuM) < InStr(Chuoi, ChVu)
   
2   Rws = Switch(ChVu = "GD", 0, ChVu = "PGD", 1, ChVu = "TP", 2 _
      , ChVu = "CV2", 3, ChVu = "NV1", 4, ChVu = "NV2", 5)
   TLg = Sh.[e18].Offset(Rws, Bac).Value
   
3   If TLg = 0 And Rws = 5 Then TLg = Sh.[q23].End(xlToLeft).Value
   
4   Rws = Switch(CVuM = "GD", 0, CVuM = "PGD", 1, CVuM = "TP", 2 _
      , CVuM = "CV2", 3, CVuM = "NV1", 4, CVuM = "NV2", 5)
      Set Rng = Sh.[e18].Offset(Rws).Resize(, 11)
   If Thang Then
      For Each Cls In Rng
         If Cls.Column = 6 And Cls > TLg Then
            Target.Offset(, 1).Value = 1:       Exit For
         ElseIf Cls.Value <= TLg And Cls.Offset(, 1).Value > TLg Then
            Target.Offset(, 1).Value = Sh.Cells(17, Cls.Column + 1).Value
            Exit For
         End If
      Next Cls
   Else
      For Each Cls In Rng
         If Cls.Value < TLg And Cls.Offset(, 1).Value = "" Then
            Target.Offset(, 1).Value = Sh.Cells(17, Cls.Column).Value
            Exit For
         ElseIf Cls.Value < TLg And Cls.Offset(, 1).Value >= TLg Then
            Target.Offset(, 1).Value = Sh.Cells(17, Cls.Column).Value
            Exit For
         End If
      Next Cls
   End If
 End If
End Sub

Dịch từ VBA sang tiếng Việt:

(1) Khai báo 1 hằng kiểu chuỗi, chứa tuần tự mã chức vụ mà bạn đang có; Nếu tăng số lượng chức vụ, như CV1, CS1, CS2, TV. . . thì fải thêm vô đây; nhưng thêm cũng theo 1 trật tự nhất định như bạn thấy;

(2) & (4) Như trên, nếu thêm bậc lương ở hàng nào thì hàng đó được thêm vô & sửa lại cặp nhóm, như thêm CV1 như sau:

Mã:
2   Rws = Switch(ChVu = "GD", 0, ChVu = "PGD", 1, ChVu = "TP", 2 [B], ChVu = "CV1", 3[/B] _
      , ChVu = "CV2", [B]4[/B], ChVu = "NV1", [B]5[/B], ChVu = "NV2", [B]6[/B])

(3) Chú í con số 5 là dòng cuối, nơi chỉ có 9 bậc lượng.


(Xin lỗi chưa thể xem lại vì có Fone của NICK từ HN gọi nhậu)
 
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ứ :-?
Và với đoạn code như sau của em
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
1 Const Chuoi As String = "GDPGD KTTTP CV1CV2NV1NV2"                  '<=|'
 Const SySo As Byte = 99               ' Tong Só Nguòi Trong Co Quan'
 If Not Intersect(Target, Union(Range("AP8:AP" & SySo), Range("Au8:AU" & SySo), _
   Range("AZ8:Az" & SySo))) Is Nothing Then
   Dim Sh As Worksheet, Cls As Range, Rng As Range
   Dim ChVu As String, CVuM As String:       Dim Thang As Boolean
   Dim Rws As Long, Bac As Byte, TLg As Double
   
   ChVu = Target.Offset(, -3).Value:            Bac = Target.Offset(, -1).Value
   CVuM = Target.Value:                         Set Sh = Sheets("Bang LHQ")
   
   Thang = InStr(Chuoi, CVuM) < InStr(Chuoi, ChVu)
   
2   Rws = Switch(ChVu = "GD", 0, ChVu = "PGD", 1, ChVu = "KTT", 2, ChVu = "TP", 3 _
      , ChVu = "CV1", 4, ChVu = "CV2", 5, ChVu = "NV1", 6, ChVu = "NV2", 7)
   TLg = Sh.[e18].Offset(Rws, Bac).Value
   
3   If TLg = 0 And Rws = 7 Then TLg = Sh.[Z25].End(xlToLeft).Value
   
4   Rws = Switch(CVuM = "GD", 0, CVuM = "PGD", 1, CVuM = "KTT", 2, CVuM = "TP", 3 _
      , CVuM = "CV1", 4, CVuM = "CV2", 5, CVuM = "NV1", 6, CVuM = "NV2", 7)
      Set Rng = Sh.[e18].Offset(Rws).Resize(, 20)
   If Thang Then
      For Each Cls In Rng
         If Cls.Column = 6 And Cls > TLg Then
            Target.Offset(, 1).Value = 1:       Exit For
         ElseIf Cls.Value <= TLg And Cls.Offset(, 1).Value > TLg Then
            Target.Offset(, 1).Value = Sh.Cells(17, Cls.Column + 1).Value
            Exit For
         End If
      Next Cls
   Else
      For Each Cls In Rng
         If Cls.Value < TLg And Cls.Offset(, 1).Value = "" Then
            Target.Offset(, 1).Value = Sh.Cells(17, Cls.Column).Value
            Exit For
         ElseIf Cls.Value < TLg And Cls.Offset(, 1).Value >= TLg Then
            Target.Offset(, 1).Value = Sh.Cells(17, Cls.Column).Value
            Exit For
         End If
      Next Cls
   End If
 End If
End Sub
á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.
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom