返回列表 上一主題 發帖

奬金要如何用vba計算呢

回復 15# sillykin


    區分                                             營業單位              管理單位       
                                            幹部        非幹部         幹部     非幹部
30%未滿者                        -25,000        -10,000        -25,000        -10,000
30%以上~40%未滿者                        -20,000        -7,000        -20,000        -7,000
40%以上~50%未滿者                        -16,000        -5,000        -16,000        -5,000
50%以上~60%未滿者                        -12,000        -4,000        -12,000        -4,000
60%以上~70%未滿者                        -8,000        -3,000        -8,000        -3,000
70%以上~80%未滿者                        -6,000        -2,000        -6,000        -2,000
80%以上~90%未滿者                        -4,000        -1,000        -4,000        -1,000
90%以上~100%未滿者                        -2,000        -500        -2,000        -500
達成100%                                      2,000            800         1,000         500
逾100%以上                               每1%×155        每1%×75         每1%× 75每1%× 55


只有達到100%才會有加額外的奬金...低於100%以下依照未滿比率 扣奬金(但是要分營業單位或管理單位)(幹部或非幹部)

TOP

回復 16# sillykin


    如果逹成比率(%)這欄位格由儲存格自己用函數去算,,,只求奬金部份即可...是否可行..感謝大大在指教一下..感恩

TOP

回復 16# sillykin
程式已修改請重新下載8# 程式碼
有錯誤請看圖


   
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 19# sillykin


    不好意思我使用的版本是ecxel2000
執行結果為圖片顯示"未定義"

未定義1.JPG (75.67 KB)

未定義1.JPG

TOP

回復 20# sillykin


    大大你好..上述的問題都巳經解決了..在請教一個小問題

假如"營業單位"中--分為12個小單位-如 :單位1、單位2、單位3、單位4、單位5.....、單位12
     "管理單位"中---分為8個小單位
  
在這種情形要如何去處理呢??
VBA要如何去判斷呢???

TOP

回復 21# sillykin
請上傳檔案看看
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 22# GBKEE


    請大大查閱...

成績OK444.rar (19.39 KB)

TOP

回復 23# sillykin
  1. Option Explicit
  2. Sub Ex()
  3.     Dim I As Integer
  4.     With Sheets("&&單位成績總表&&").Range("A3")
  5.         Do While .Offset(I) <> ""
  6.             獎金程式 .Offset(I), .Offset(I, 2), .Offset(I, 4)
  7.             I = I + 1
  8.         Loop
  9.     End With
  10. End Sub
  11. Private Sub 獎金程式(單位 As Range, 職稱 As String, 達成額 As Integer)
  12.     Dim Ar, 責任額 As Integer, 達成百分比 As Single, 獎金 As Integer, 副總獎金 As Integer
  13.     '  ****(條件工作表中) 沒有的職稱 ->  高級專員, 權理經理  ***
  14.     Dim 部門 As String, 稱呼 As String, M As Integer, A As Integer
  15.     ' *******LTrim、RTrim 與 Trim 函數  傳回一個沒有前頭空白 (LTrim)、後面空白 (RTrim)***************************
  16.                                                        '或前後均無空白的Variant (String),其中所含為給定的字串。*
  17.     稱呼 = Trim(單位.Offset(, 2))                                      '傳回職稱前後均無空白的Variant (String)  *
  18.     '************************************************************************************************************
  19.     單位.Offset(, 7) = Application.Match(稱呼, Array(0, "副總經理", "協理", "高級專員", "經理", _
  20.     "權理經理", "副經理", "副理", "一等襄理", "二等襄理", "業務專員", "辦事員", "助理員", "雇員", "服務生"), 0)
  21.     '************************************************************************************************************
  22.     '************************************************************************************************************
  23.     部門 = Replace(單位, "單位", "")                                    '去掉 "單位" 傳回 數字或文字            *
  24.     If Mid(部門, 1, 1) Like "[0-9]" Then 部門 = "營業部門"              '為數字->營業部門                       *
  25.     責任額 = IIf(部門 = "營業部門", 500, 300)                           '預設為非幹部的責任額                   *
  26.     副總獎金 = 0                                                        '預設為副總獎金為 0                     *
  27.     '************************************************************************************************************
  28.     If 部門 = "營業部門" Then
  29.         Ar = Array(0, 0, -10000, -7000, -5000, -4000, -3000, -2000, -1000, -500, 800, 75)           '非幹部(獎懲獎金)
  30.         If 單位.Offset(, 7) <= 10 Then
  31.             Ar = Array(0, 0, -25000, -20000, -16000, -12000, -8000, -6000, -4000, -2000, 2000, 155) '幹部  (獎懲獎金)
  32.             M = Application.Match(稱呼, Array("高級專員", "二等襄理", "一等襄理", "副經理", "協理", "經理", "副總經理"), 0)
  33.             'M = > Match 的數字
  34.             責任額 = Application.Index(Array(100, 1500, 2000, 2200, "(註1)", "(註1)", 2500), M)  '責任額 陣列(高級專員->100)
  35.             'Index 傳回一個表格或範圍內的某個值或參照位址。
  36.             副總獎金 = IIf(稱呼 = "副總經理", 2000, 0)
  37.         End If
  38.     Else
  39.         部門 = "管理部門"
  40.         Ar = Array(0, 0, -10000, -7000, -5000, -4000, -3000, -2000, -1000, -500, 500, 55)  '非幹部(獎懲獎金)
  41.         If 單位.Offset(, 7) <= 10 Then
  42.             Ar = Array(0, 0, -25000, -20000, -16000, -12000, -8000, -6000, -4000, -2000, 1000, 75)    '幹部  (獎懲獎金)
  43.             M = Application.Match(稱呼, Array("高級專員", "二等襄理", "一等襄理", "副經理", "經理"), 0) '***管理單位 :沒有的職稱 ,副總經理
  44.             責任額 = Application.Index(Array(100, 600, 700, 800, 900, 2500), M)                         '責任額 陣列(高級專員->100)
  45.            '管理部門沒有副總經理 -> ' 副總獎金 = IIf(稱呼 = "副總經理", 2000, 0)
  46.         End If
  47.     End If
  48.     單位.Offset(, 3) = 責任額
  49.     '*************************************** F欄 (達成比率%)用公式有兩式可用*******************************
  50.     單位.Offset(, 5) = "=Round(RC[-1] / RC[-2] * 100, 0)"              'R1C1表示法
  51.    '單位.Offset(, 5) = "=Round(" & 單位.Offset(, 4).Address & " / " & 單位.Offset(, 3).Address & "* 100, 0)"
  52.     '*******************************************************************************************************
  53.     達成百分比 = Round(達成額 / 責任額 * 100, 0)
  54.     '單位.Offset(, 5) = 達成百分比
  55.     獎金 = 0
  56.     If 達成額 / 責任額 * 10 < 3 Then
  57.         M = 2
  58.     ElseIf 達成額 / 責任額 * 10 > 10 Then
  59.         M = 10
  60.         獎金 = Ar(UBound(Ar))
  61.     Else
  62.         M = Int(達成額 / 責任額 * 10)
  63.     End If
  64.     單位.Offset(, 6) = Ar(M) + ((達成百分比 - 100) * 獎金) + 副總獎金   'Ar(M) = 獎懲的金額
  65.     '獎金計算公式: = 獎懲的金額+  ((達成100%以上-100)* 獎金) + 副總獎金
  66. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 24# GBKEE


    謝謝大大的回覆..由衷感謝板主的幫忙
  單位方面有點寫錯..
營業單位應為 :萬里分部、 金山分部、石門分部、三之分部、義山分部、水碓分部、營業部、英專分部、竹圍分部、龍形分部、八里分部、板橋分 部、桃園分部、代理部、出納部、業務部、理財部
管理分部應為 :審查部、法務部、會計部、總務部、行政部、信用部、企劃部、教育部、人事部
  
不好意思..製造板主很多的問題 ,身感抱歉

TOP

回復 24# sillykin
  1. Option Explicit
  2. Const 管理部門 = "審查部、法務部、會計部、總務部、行政部、信用部、企劃部、教育部、人事部"
  3. Const 職務別 = "0,副總經理,協理,高級專員,經理,權理經理,副經理,副理,一等襄理,二等襄理,業務專員,辦事員,助理員,雇員,服務生"
  4. Sub Ex()
  5.     Dim I As Integer
  6.     With Sheets("&&單位成績總表&&").Range("A3")
  7.         Do While .Offset(I) <> ""
  8.             獎金程式 .Offset(I), .Offset(I, 2), .Offset(I, 4)
  9.             I = I + 1
  10.         Loop
  11.     End With
  12. End Sub
  13. Private Sub 獎金程式(單位 As Range, 職稱 As String, 達成額 As Integer)
  14.     '  ****(條件工作表中) 沒有的職稱 ->  高級專員, 權理經理  ***
  15.     Dim Ar, 責任額 As Integer, 達成百分比 As Single, 獎金 As Integer, 副總獎金 As Integer
  16.     Dim 部門 As String, 職稱代號 As String, M As Integer '
  17.     'LTrim、RTrim 與 Trim 函數  傳回一個沒有前頭空白 (LTrim)、後面空白 (RTrim)或前後均無空白的Variant (String),其中所含為給定的字串。*
  18.     職稱代號 = Trim(單位.Offset(, 2))                                                   '傳回職稱代號前後均無空白的Variant (String)
  19.     'Split 函數 傳回一個陳列索引從零開始的一維陣列,它包含指定數目的子字串。
  20.     單位.Offset(, 7) = Application.Match(職稱代號, Split(職務別, ","), 0)               'Match 職稱代號在職務別以Split分割出的陣列中的位置
  21.     'InStr 函數 傳回在某字串中一字串的最先出現位置,此位置為 Variant (Long)。
  22.     部門 = IIf(InStr(管理部門, 單位), "管理部門", "營業部門")               'InStr傳回0->沒找到="營業部門"
  23.     副總獎金 = 0                                                        '預設為副總獎金為 0
  24.     責任額 = IIf(部門 = "管理部門", 300, 500)
  25.     If 部門 = "營業部門" Then
  26.         Ar = Array(0, 0, -10000, -7000, -5000, -4000, -3000, -2000, -1000, -500, 800, 75)           '非幹部(獎懲獎金)
  27.         If 單位.Offset(, 7) <= 10 Then
  28.             Ar = Array(0, 0, -25000, -20000, -16000, -12000, -8000, -6000, -4000, -2000, 2000, 155) '幹部  (獎懲獎金)
  29.             M = Application.Match(職稱代號, Array("高級專員", "二等襄理", "一等襄理", "副經理", "協理", "經理", "副總經理"), 0)
  30.             'M = > Match 的數字
  31.             責任額 = Application.Index(Array(500, 1500, 2000, 2200, "(註1)", "(註1)", 2500), M)  '責任額 陣列(高級專員->100)
  32.             'Index 傳回一個表格或範圍內的某個值或參照位址。
  33.             副總獎金 = IIf(職稱代號 = "副總經理", 2000, 0)
  34.         End If
  35.     Else       ' 部門 => "管理部門"
  36.         Ar = Array(0, 0, -10000, -7000, -5000, -4000, -3000, -2000, -1000, -500, 500, 55)  '非幹部(獎懲獎金)
  37.         If 單位.Offset(, 7) <= 10 Then
  38.             Ar = Array(0, 0, -25000, -20000, -16000, -12000, -8000, -6000, -4000, -2000, 1000, 75)    '幹部  (獎懲獎金)
  39.             M = Application.Match(職稱代號, Array("高級專員", "二等襄理", "一等襄理", "副經理", "經理"), 0)
  40.             '***沒有的職稱,[副總經理],管理單位如有副總經理(程式執行會產生錯誤)*****************************
  41.             責任額 = Application.Index(Array(100, 600, 700, 800, 900, 2500), M)                         '責任額 陣列(高級專員->100)
  42.            '管理部門沒有副總經理 -> ' 副總獎金 = IIf(職稱代號  = "副總經理", 2000, 0)
  43.         End If
  44.     End If
  45.     單位.Offset(, 3) = 責任額
  46.     '*************************************** F欄 (達成比率%)用公式有兩式可用*******************************
  47.     單位.Offset(, 5) = "=Round(RC[-1] / RC[-2] * 100, 0)"              'R1C1表示法
  48.    '單位.Offset(, 5) = "=Round(" & 單位.Offset(, 4).Address & " / " & 單位.Offset(, 3).Address & "* 100, 0)"
  49.     '*******************************************************************************************************
  50.     達成百分比 = Round(達成額 / 責任額 * 100, 0)
  51.     '單位.Offset(, 5) = 達成百分比
  52.     獎金 = 0
  53.     If 達成額 / 責任額 * 10 < 3 Then
  54.         M = 2
  55.     ElseIf 達成額 / 責任額 * 10 > 10 Then
  56.         M = 10
  57.         獎金 = Ar(UBound(Ar))
  58.     Else
  59.         M = Int(達成額 / 責任額 * 10)
  60.     End If
  61.     單位.Offset(, 6) = Ar(M) + ((達成百分比 - 100) * 獎金) + 副總獎金   'Ar(M) = 獎懲的金額
  62.     '獎金計算公式: = 獎懲的金額+  ((達成100%以上-100)* 獎金) + 副總獎金
  63. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 小事不做、大事難成。
返回列表 上一主題