Option Explicit
Const 管理部門 = "審查室、法務室、會計室、總務室、行政管理室、徵信室、企劃室、教育發展室、資訊室"
Const 職務別 = "0,副總經理,協理,高級專員,經理,權理經理,副經理,副理,一等襄理,二等襄理,業務專員,辦事員,助理員,雇員,服務生"
Sub Ex()
Dim I As Integer
With Sheets("&&單位成績總表&&").Range("A3")
Do While .Offset(I) <> ""
獎金程式 .Offset(I), .Offset(I, 2), .Offset(I, 4)
I = I + 1
Loop
End With
End Sub
Private Sub 獎金程式(單位 As Range, 職稱 As String, 達成額 As Integer)
' ****(條件工作表中) 沒有的職稱 -> 高級專員, 權理經理 ***
Dim Ar, 責任額 As Integer, 達成百分比 As Single, 獎金 As Integer, 副總獎金 As Integer
Dim 部門 As String, 職稱代號 As String, M As Integer '
'LTrim、RTrim 與 Trim 函數 傳回一個沒有前頭空白 (LTrim)、後面空白 (RTrim)或前後均無空白的Variant (String),其中所含為給定的字串。*
職稱代號 = Trim(單位.Offset(, 2)) '傳回職稱代號前後均無空白的Variant (String)
'Split 函數 傳回一個陳列索引從零開始的一維陣列,它包含指定數目的子字串。
單位.Offset(, 7) = Application.Match(職稱代號, Split(職務別, ","), 0) 'Match 職稱代號在職務別以Split分割出的陣列中的位置
'InStr 函數 傳回在某字串中一字串的最先出現位置,此位置為 Variant (Long)。
部門 = IIf(InStr(管理部門, 單位), "管理部門", "營業部門") 'InStr傳回0->沒找到="營業部門"
副總獎金 = 0 '預設為副總獎金為 0
責任額 = IIf(部門 = "管理部門", 300, 500)
If 部門 = "營業部門" Then
Ar = Array(0, 0, -10000, -7000, -5000, -4000, -3000, -2000, -1000, -500, 800, 75) '非幹部(獎懲獎金)
If 單位.Offset(, 7) <= 10 Then
Ar = Array(0, 0, -25000, -20000, -16000, -12000, -8000, -6000, -4000, -2000, 2000, 155) '幹部 (獎懲獎金)
M = Application.Match(職稱代號, Array("高級專員", "二等襄理", "一等襄理", "副經理", "協理", "經理", "副總經理"), 0)
'M = > Match 的數字
責任額 = Application.Index(Array(500, 1500, 2000, 2200, "(註1)", "(註1)", 2500), M) '責任額 陣列(高級專員->100)
'Index 傳回一個表格或範圍內的某個值或參照位址。
副總獎金 = IIf(職稱代號 = "副總經理", 2000, 0)
End If
Else ' 部門 => "管理部門"
Ar = Array(0, 0, -10000, -7000, -5000, -4000, -3000, -2000, -1000, -500, 500, 55) '非幹部(獎懲獎金)
If 單位.Offset(, 7) <= 10 Then
Ar = Array(0, 0, -25000, -20000, -16000, -12000, -8000, -6000, -4000, -2000, 1000, 75) '幹部 (獎懲獎金)
M = Application.Match(職稱代號, Array("高級專員", "二等襄理", "一等襄理", "副經理", "經理"), 0)
'***沒有的職稱,[副總經理],管理單位如有副總經理(程式執行會產生錯誤)*****************************
責任額 = Application.Index(Array(100, 600, 700, 800, 900, 2500), M) '責任額 陣列(高級專員->100)
'管理部門沒有副總經理 -> ' 副總獎金 = IIf(職稱代號 = "副總經理", 2000, 0)
End If
End If
單位.Offset(, 3) = 責任額
'*************************************** F欄 (達成比率%)用公式有兩式可用*******************************
單位.Offset(, 5) = "=Round(RC[-1] / RC[-2] * 100, 0)" 'R1C1表示法
'單位.Offset(, 5) = "=Round(" & 單位.Offset(, 4).Address & " / " & 單位.Offset(, 3).Address & "* 100, 0)"
'*******************************************************************************************************
達成百分比 = Round(達成額 / 責任額 * 100, 0)
'單位.Offset(, 5) = 達成百分比
獎金 = 0
If 達成額 / 責任額 * 10 < 3 Then
M = 2
ElseIf 達成額 / 責任額 * 10 > 10 Then
M = 10
獎金 = Ar(UBound(Ar))
Else
M = Int(達成額 / 責任額 * 10)
End If
單位.Offset(, 6) = Ar(M) + ((達成百分比 - 100) * 獎金) + 副總獎金 'Ar(M) = 獎懲的金額
'獎金計算公式: = 獎懲的金額+ ((達成100%以上-100)* 獎金) + 副總獎金
End Sub
執行出來會發生錯誤作者: GBKEE 時間: 2013-7-23 10:15