iT邦幫忙

0

求excel算每日正常上班人數及加班人數

  • 分享至 

  • xImage

https://ithelp.ithome.com.tw/upload/images/20220326/20147760TgNZ90Wapg.png 如圖片我想要自動計算員工班表的每日正常班的上班總人數及加班總人數各是多少(但是條件有點多不知道怎麼搞). 以1/1為例 白色(空白)為正常上班日共13人,黃色的是休息,藍色是加班但是有寫OT的才有算來加班沒寫則代表那天沒來加班,xx則代表那天的加班日被調到其他天了但是還是不算有來.

有沒有高手能解決...能付費

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
海綿寶寶
iT邦大神 1 級 ‧ 2022-03-26 18:37:50
最佳解答

正常班的上班總人數

白色且為空格(裡面沒寫任何文字)就+1

加班總人數

藍色且裡面「包含」 OT 兩字(有一些 OT8, OT9)就+1

這樣對嗎?

Option Explicit
Const CellDay1 = "B2"   '第一天的儲存格位址
Const colorWhite = -4142    '白色
Const colorBlue = 37        '藍色
Global gMaxRow As Integer
Sub Main()
    Dim savedPos
    
    gMaxRow = Range("A65535").End(xlUp).Row

    Range(CellDay1).Select
    Do While ActiveCell.Value <> ""
        savedPos = ActiveCell.Address
        ActiveCell.Offset(1, 0).Select
        Call OneDay
        Range(savedPos).Select
        ActiveCell.Offset(0, 1).Select
    Loop

    Call setRowHeadings
End Sub
'處理一天(一欄)
Private Sub OneDay()
    Dim cNormal, cOT, cOT8, cOT9 As Integer
    
    Do Until ActiveCell.Row > gMaxRow
        Debug.Print "R" & ActiveCell.Row & "C" & ActiveCell.Column & " color=" & ActiveCell.Interior.ColorIndex
        If ActiveCell.Interior.ColorIndex = colorWhite Then
            If ActiveCell.Value = "" Then
                cNormal = cNormal + 1
            End If
        ElseIf ActiveCell.Interior.ColorIndex = colorBlue Then
            If InStr(1, ActiveCell, "OT") <> 0 Then
                If InStr(1, ActiveCell, "OT8") <> 0 Then
                    cOT8 = cOT8 + 1
                ElseIf InStr(1, ActiveCell, "OT9") <> 0 Then
                    cOT9 = cOT9 + 1
                Else
                    cOT = cOT + 1
                End If
            End If
        End If
        ActiveCell.Offset(1, 0).Select
    Loop
    
    ActiveCell.Value = cNormal
    ActiveCell.Offset(1, 0).Value = cOT
    ActiveCell.Offset(2, 0).Value = cOT8
    ActiveCell.Offset(3, 0).Value = cOT9
    ActiveCell.Offset(4, 0).Value = cNormal + cOT + cOT8 + cOT9
End Sub
'設定列標題
Private Sub setRowHeadings()
    Range("A65535").End(xlUp).Select
    ActiveCell.Offset(1, 0) = "正常班"
    ActiveCell.Offset(2, 0) = "OT"
    ActiveCell.Offset(3, 0) = "OT8"
    ActiveCell.Offset(4, 0) = "OT9"
    ActiveCell.Offset(5, 0) = "總人數"
End Sub

執行前有三個地方要請你自己調整
最前面的

Const CellDay1 = "B2"   '第一天(日期)的儲存格位址,就是「1 的儲存格位址」
Const colorWhite = -4142    '白色, 請參照下面說明設定
Const colorBlue = 37        '藍色, 請參照下面說明設定

由於不確定你使用的顏色是什麼
程式執行時會顯示每一格的顏色如下圖
再請你自己設定「白色」和「藍色」即可
https://ithelp.ithome.com.tw/upload/images/20220327/20001787Fuhdf0Txce.png

看更多先前的回應...收起先前的回應...
a35715922 iT邦新手 5 級 ‧ 2022-03-26 18:44:01 檢舉

是的

a35715922 iT邦新手 5 級 ‧ 2022-03-26 18:44:57 檢舉

可以的話把 OT & OT8 & OT9 個別顯示出來

結果要放在什麼地方
長成什麼樣子

a35715922 iT邦新手 5 級 ‧ 2022-03-26 19:08:06 檢舉

https://ithelp.ithome.com.tw/upload/images/20220326/20147760nj6zbGZDjY.png

像圖片放在對應的日期下方即可

了解
我寫好再回覆

a35715922 iT邦新手 5 級 ‧ 2022-03-26 20:52:36 檢舉

人怎麼那麼好~/images/emoticon/emoticon02.gif

寫好了
執行 vba 前
https://ithelp.ithome.com.tw/upload/images/20220326/20001787kwSY4UY227.png
執行 VBA 後
https://ithelp.ithome.com.tw/upload/images/20220326/20001787y2xqJS77ES.png

a35715922 iT邦新手 5 級 ‧ 2022-03-27 09:49:57 檢舉

Hi 我有發mail給你,因為我手機找不到站內簡訊可以回

我要發表回答

立即登入回答