- 帖子
- 5923
- 主題
- 13
- 精華
- 1
- 積分
- 5986
- 點名
- 0
- 作業系統
- win10
- 軟體版本
- Office 2010
- 閱讀權限
- 150
- 性別
- 男
- 來自
- 台灣基隆
- 註冊時間
- 2010-5-1
- 最後登錄
- 2022-1-23
        
|
回復 23# sillykin - Option Explicit
- 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, A As Integer
- ' *******LTrim、RTrim 與 Trim 函數 傳回一個沒有前頭空白 (LTrim)、後面空白 (RTrim)***************************
- '或前後均無空白的Variant (String),其中所含為給定的字串。*
- 稱呼 = Trim(單位.Offset(, 2)) '傳回職稱前後均無空白的Variant (String) *
- '************************************************************************************************************
- 單位.Offset(, 7) = Application.Match(稱呼, Array(0, "副總經理", "協理", "高級專員", "經理", _
- "權理經理", "副經理", "副理", "一等襄理", "二等襄理", "業務專員", "辦事員", "助理員", "雇員", "服務生"), 0)
- '************************************************************************************************************
- '************************************************************************************************************
- 部門 = Replace(單位, "單位", "") '去掉 "單位" 傳回 數字或文字 *
- If Mid(部門, 1, 1) Like "[0-9]" Then 部門 = "營業部門" '為數字->營業部門 *
- 責任額 = IIf(部門 = "營業部門", 500, 300) '預設為非幹部的責任額 *
- 副總獎金 = 0 '預設為副總獎金為 0 *
- '************************************************************************************************************
- 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(100, 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
複製代碼 |
|