返回列表 上一主題 發帖

[發問] 計算個別員工於週六上班次數

[發問] 計算個別員工於週六上班次數

如果要計算個別員工於週六上班次數(非空格),公式如何設定,請指導

努力學習中,謝謝前輩

回復 1# hkyan

O2=COUNTIFS($B$1:$N$1,"*週六*",$B2:$N2,">""")

向下拉

TOP

我沒說清楚,列1是自訂格式日期顯示,並非文字輸入,故公式不可行

此外,要再新增一欄記錄上次週六上班日期距離今日有多久,有可能用公式設置嗎?
努力學習中,謝謝前輩

TOP

count sat duty.rar (7.93 KB)
請幫忙
努力學習中,謝謝前輩

TOP

回復 4# hkyan
  1. Option Explicit
  2. Sub Ex()
  3.     Dim Rng As Range, i As Integer, ii As Integer, R As Range, d1 As Object, d2 As Object
  4.     Set d1 = CreateObject("SCRIPTING.DICTIONARY")        '字典物件
  5.     Set d2 = CreateObject("SCRIPTING.DICTIONARY")        '字典物件
  6.     i = 2               '從B2欄數 開始
  7.     With ActiveSheet    '指定工作表
  8.         Do While .Cells(1, i) <> ""             '執行迴圈的條件: i欄的第一列 <>""
  9.             If Weekday(.Cells(1, i), 2) = 6 Then '日期的星期="週六"
  10.                 If Not Rng Is Nothing Then      '設定"週六"的位置
  11.                     Set Rng = Union(Rng, .Cells(1, i))
  12.                 Else
  13.                     Set Rng = .Cells(1, i)
  14.                 End If
  15.             End If
  16.             i = i + 1                           '下一個欄數
  17.         Loop
  18.         i = 2                                   '從A2列數 開始
  19.         Do While .Cells(i, "A") <> ""           '執行迴圈的條件: A欄的i列 <>""
  20.             '字典物件(KEY)對應一個 Item
  21.             d1(.Cells(i, "A").Value) = ""       '字典物件(KEY)的ITEM =""
  22.             d2(.Cells(i, "A").Value) = ""
  23.             For Each R In Rng                   '每一個 R 的星期都是"週六"
  24.                 If R.Cells(i) <> "" Then        'R.Cells(i):  R下方第i個Cell
  25.                     d1(.Cells(i, "A").Value) = Val(d1(.Cells(i, "A").Value)) + 1
  26.                                                 '字典物件(KEY) =VAL(字典物件(KEY))+1 (對應的 Item)
  27.                     d2(.Cells(i, "A").Value) = Date - R
  28.                                                 '字典物件(KEY) =當日- R [天數](對應的 Item)
  29.                 End If
  30.             Next
  31.             i = i + 1
  32.         Loop
  33.         Range("R2").Resize(d1.Count).Value = Application.Transpose(d1.ITEMS)
  34.         Range("S2").Resize(d1.Count).Value = Application.Transpose(d2.ITEMS)
  35.         
  36.     End With
  37. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 4# hkyan
(注意:為了讓日期更具發展性, 刻意將你的樣本的統計欄位調到最左邊)
如下圖, 試試看:
  1. Option Explicit
  2. Private Sub CommandButton1_Click()
  3.     Dim i, j, lastRow, lastCol As Integer
  4.     Dim 距今 As Long
  5.     lastRow = [C65536].End(xlUp).Row
  6.     lastCol = [IV1].End(xlToLeft).Column
  7.     [A2].Resize(lastRow, 2) = ""
  8.     For i = 4 To lastCol
  9.         If Weekday(Cells(1, i), vbMonday) = 6 Then
  10.             距今 = Date - Cells(1, i)
  11.             For j = 2 To lastRow
  12.                 If Cells(j, i) <> "" Then
  13.                     Cells(j, 1) = Cells(j, 1) + 1   '週六加班日數+1
  14.                     Cells(j, 2) = 距今
  15.                 End If
  16.             Next
  17.         End If
  18.     Next
  19. End Sub
複製代碼

TOP

謝謝論壇,謝謝各位前輩
後學藉此帖練習陣列與字典,學習方案如下,請各位前輩指教

執行前:


執行結果:



Option Explicit
Sub TEST()
Dim Brr, Y, i&, j&, xR As Range
Set Y = CreateObject("Scripting.Dictionary")
Set xR = Range([S1], Cells(Rows.Count, "A").End(3))
xR.Offset(1, 17).ClearContents: Brr = xR
For i = 2 To UBound(Brr)
   For j = 2 To UBound(Brr, 2) - 3
      If Format(Brr(1, j), "aaaa") = "星期六" And Trim(Brr(i, j)) <> "" Then
         Brr(i, UBound(Brr, 2) - 1) = Brr(i, UBound(Brr, 2) - 1) + 1
         If Brr(1, j) > Y(i) Then
            Brr(i, UBound(Brr, 2)) = Date - Brr(1, j)
            Y(i) = Brr(1, j)
         End If
      End If
   Next
Next
xR = Brr
Set Y = Nothing: Set xR = Nothing: Erase Brr
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

R2=SUMPRODUCT((TEXT(B$1:P$1,"AAA")="週六")*(B2:P2<>""))

11321.png (12.62 KB)

11321.png

google"EXCEL迷"  blog  或google網址:https://hcm19522.blogspot.com/

TOP

        靜思自在 : 我們要做好社會的環保,也要做好內心的環保。
返回列表 上一主題