返回列表 上一主題 發帖

[發問] (薪資進化問題)薪資與獎金問題請教?

回復 1# s7659109
試試看, 如下圖:

VBA code 如下:
  1. Option Explicit

  2. Private Sub Worksheet_Change(ByVal Target As Range)
  3.     Dim j, lastRow, 級數1, 最高級 As Integer
  4.     Dim 獎金1 As Long
  5.     Dim rng As Range
  6.     Dim 類別1, 學歷1 As String
  7.    
  8.     lastRow = [J65536].End(xlUp).Row    '取得J欄最下一行
  9.     Set rng = [J3].Resize(lastRow, 1)
  10.    
  11.     If Not Intersect(Target, rng) Is Nothing Then
  12.             Target.Offset(0, 1).Resize(1, 20).Clear       '清除填入區
  13.    
  14.             學歷1 = Target.Offset(0, -1)
  15.             級數1 = --Target.Value
  16.             最高級 = Application.VLookup(學歷1, Range("C3:E9"), 2, 0)
  17.             獎金1 = Application.VLookup(學歷1, Range("C3:E9"), 3, 0)
  18.         
  19.             For j = 1 To 9
  20.                 If j + 級數1 - 2 < 最高級 Then
  21.                     Target.Offset(0, j * 2) = 獎金1 / 2
  22.                     Target.Offset(0, j * 2 - 1) = Cells(級數1 + j, 2)
  23.                     Target.Offset(0, j * 2 - 1).Resize(1, 2).Interior.ColorIndex = xlNone
  24.                 Else
  25.                     Target.Offset(0, j * 2) = 獎金1
  26.                     Target.Offset(0, j * 2 - 1) = Cells(最高級 + 1, 2)
  27.                     Target.Offset(0, j * 2 - 1).Resize(1, 2).Interior.ColorIndex = 38
  28.                 End If
  29.             Next
  30.     End If
  31. End Sub
複製代碼
因有修改表格, 及設計多重下拉清,
故請參考附檔
薪資進化問題.7z
http://www.mediafire.com/download/y2p70semb9c5zg0/%E8%96%AA%E8%B3%87%E9%80%B2%E5%8C%96%E5%95%8F%E9%A1%8C.7z

TOP

回復 3# s7659109
回覆 請先按 回覆, 再回覆,
否則收不到你的 回覆, 不知你有何新問題. 謝謝!!
等104年時, 將103年的欄位刪除就可以了

TOP

回復 6# s7659109
回覆 請先按 回覆, 再回覆,
例如你希望 6F 給你回覆, 則在 6F 下面的【回覆】按鈕上點一下,
這樣 6F 的人就會接到系統的通知
, 如此才不會耽誤時間,
否則收不到你的 回覆, 不知你有何新問題. 謝謝!!
1. 回覆上一個問題:
原想法 將 103年 的欄位刪除 有誤, 如此一來,
所有的 級數 均應重新更新, 工程較大,
較簡單的方法是:
將 104年 的人員降級為 103年 的級數, 則其他人員的級數均不用更新.
2. 回覆目前問題:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim j, lastRow, 級數1, 最高級 As Integer
    Dim 獎金1 As Long
    Dim rng As Range
    Dim 類別1, 學歷1 As String
   
    lastRow = [J65536].End(xlUp).Row    '取得J欄最下一行
    Set rng = [J3].Resize(lastRow, 1)
   
    If Not Intersect(Target, rng) Is Nothing Then
            Target.Offset(0, 1).Resize(1, 20).Clear       '清除填入區
   
            學歷1 = Target.Offset(0, -1)
            級數1 = --Target.Value
            最高級 = Application.VLookup(學歷1, Range("C3:E9"), 2, 0)
            獎金1 = Application.VLookup(學歷1, Range("C3:E9"), 3, 0)
        
            For j = 1 To 9
                If j + 級數1 - 2 < 最高級 Then
               
                    'Target.Offset(0, j * 2) = 獎金1 / 2
                    'Cells(級數1 + j, 2) 就是當年薪水
                    Target.Offset(0, j * 2) = Cells(級數1 + j, 2) * 2
                    
                    Target.Offset(0, j * 2 - 1) = Cells(級數1 + j, 2)
                    Target.Offset(0, j * 2 - 1).Resize(1, 2).Interior.ColorIndex = xlNone
                Else
               
                    'Target.Offset(0, j * 2) = 獎金1
                    Target.Offset(0, j * 2) = Cells(最高級 + 1, 2) * 5
                    
                    Target.Offset(0, j * 2 - 1) = Cells(最高級 + 1, 2)
                    Target.Offset(0, j * 2 - 1).Resize(1, 2).Interior.ColorIndex = 38
                End If
            Next
    End If
End Sub
不過目前公定有這麼好康嗎?

TOP

        靜思自在 : 有時當思無時苦,好天要積雨來糧。
返回列表 上一主題