Board logo

標題: [發問] (薪資進化問題)薪資與獎金問題請教? [打印本頁]

作者: s7659109    時間: 2014-4-7 11:44     標題: (薪資進化問題)薪資與獎金問題請教?

增加類別,區分為正式職員與臨時職員,以及獎金欄位,103年度薪資水準如上,104年度薪資每位跳升一級,但薪資當跳到頂就不在跳了並出現紅色與獎金跳到最高級也出現粉紅色,函數應如何表示?
作者: yen956    時間: 2014-4-11 11:44

回復 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
作者: s7659109    時間: 2014-4-11 12:23

大大:
你真的好強,等了好幾天,以為無人回答,謝謝你。
另有一問題請教,就是,如果某君在104年或105年、、、、110年才加入,那如何判斷呢?
這一表主要目的是,在各年度求出後,某些欄位要套到各個年度去。
作者: s7659109    時間: 2014-4-11 12:35

另外獎金的求法,若改成到頂(本題出現紅色儲存格)用當年度薪*5倍,未到頂*2倍。
作者: yen956    時間: 2014-4-15 13:20

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

大大:
另外獎金的求法,若改成到頂(本題出現紅色儲存格)用當年度薪*5倍,未到頂*2倍。
作者: yen956    時間: 2014-4-15 17:39

回復 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
不過目前公定有這麼好康嗎?




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)