- 帖子
- 5923
- 主題
- 13
- 精華
- 1
- 積分
- 5986
- 點名
- 0
- 作業系統
- win10
- 軟體版本
- Office 2010
- 閱讀權限
- 150
- 性別
- 男
- 來自
- 台灣基隆
- 註冊時間
- 2010-5-1
- 最後登錄
- 2022-1-23
        
|
20#
發表於 2013-7-22 06:54
| 只看該作者
回復 24# sillykin - 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
複製代碼 |
|