標題:
請教打卡統計問題
[打印本頁]
作者:
tony0318
時間:
2011-8-9 11:18
標題:
請教打卡統計問題
請教向附件那樣打卡出來的要如何統計
遲到的次數
遲到的時間統計
早退的時間統計
及特休的時數統計
謝謝
[attach]7322[/attach]
作者:
GBKEE
時間:
2011-8-9 19:38
回復
1#
tony0318
試試看
Sub Ex()
Dim Ar(), a, i As Integer
With Sheets("sheet1")
Ar = Application.Transpose(.Range("g2", .Range("g2").End(xlDown)))
.[f34] = UBound(Filter(Ar, .[e34], True)) + 1
.[f35] = UBound(Filter(Ar, .[e35], True)) + 1
.[f36] = UBound(Filter(Ar, .[e36], True)) + 1
For Each a In Filter(Ar, .[e37], True)
i = i + Mid(a, InStr(a, "休") + 1, InStr(a, "分") - InStr(a, "休") - 1)
Next
.[f37] = i / 60
End With
End Sub
複製代碼
作者:
tony0318
時間:
2011-8-10 08:55
非常感謝您的幫忙!
可能我寫的不清楚!
F35和F36 要呈現的是分鐘的累計,而非次數,
請您再次幫忙,謝謝。
作者:
Hsieh
時間:
2011-8-10 09:39
回復
3#
tony0318
這個問題點在於上、下班的遲到早退標準為何?
參考一下這個討論
http://forum.twbts.com/thread-3811-4-2.html
作者:
tony0318
時間:
2011-8-10 10:06
Hsieh 您好 :
對程式不是很懂,但GBKEE 的 程式應該是可行的,因為有看到特休部分是可以累加的並且換算成小時。
而遲到和早退,除要有計算次數還要有遲到累計分鐘數、早退分鐘數。
謝謝。
作者:
GBKEE
時間:
2011-8-10 14:05
回復
5#
tony0318
你對
程式不是很懂
,可以練習看看
For Each a In Filter(Ar, .[e37], True)
i = i + Mid(a, InStr(a, "休") + 1, InStr(a, "分") - InStr(a, "休") - 1)
Next
i=累計特休的分鐘 ,InStr(a, "休")=找出"休"位於字串的位置數
F35和F36 要呈現的是分鐘的累計,而非次數,
你試著改出來,不會很難的
作者:
tony0318
時間:
2011-8-10 18:18
嘗試過多次,
遲到部分是累計了,
但早退出不來,
還有特休會變成480480,
以下是我的程式代碼,不知道錯誤在哪?謝謝。
Sub Ex()
Dim Ar(), a, i As Integer
With Sheets("sheet1")
Ar = Application.Transpose(.Range("g2", .Range("g2").End(xlDown)))
.[f34] = UBound(Filter(Ar, .[e34], True)) + 1
For Each a In Filter(Ar, .[e35], True)
i = i + Mid(a, InStr(a, "到") + 1, InStr(a, "分") - InStr(a, "到") - 1)
Next
.[f35] = i
For Each a In Filter(Ar, .[e37], True)
k = k + Mid(a, InStr(a, "休") + 1, InStr(a, "分") - InStr(a, "休") - 1)
Next
.[f37] = k
For Each a In Filter(Ar, .[e36], True)
j = j + Mid(a, InStr(a, "退") + 1, InStr(a, "分") - InStr(a, "退") - 1)
Next
.[f36] = j
End With
End Sub
複製代碼
作者:
GBKEE
時間:
2011-8-10 19:45
回復
7#
tony0318
你的早退的字串是怎樣寫的 再附檔看看
作者:
tony0318
時間:
2011-8-11 09:07
您好:
我也一直覺得很奇怪,為何早退不行?
附檔如下 :
[attach]7362[/attach]
作者:
Hsieh
時間:
2011-8-11 10:31
回復
9#
tony0318
Sub ex()
[F34:F37] = ""
For Each c In [E35:E37]
For Each a In [G2:G32]
k = InStr(a, c)
If k > 0 Then c.Offset(, 1) = c.Offset(, 1) + Val(Mid(a, k + Len(c))) / IIf(c = "特休", 60, 1): If c = "遲到" Then [F34] = [F34] + 1
Next
Next
End Sub
複製代碼
作者:
GBKEE
時間:
2011-8-11 16:25
回復
7#
tony0318
還有特休會變成480480,
你沒宣告變數為數字時 J , K 傳回子串+ 子串才如此
Sub Ex()
Dim Ar(), a, i As Integer, k As Integer, j As Integer
With Sheets("sheet1")
Ar = Application.Transpose(.Range("g2", .Range("g2").End(xlDown)))
.[F34] = UBound(Filter(Ar, .[e34], True)) + 1
For Each a In Filter(Ar, .[e35], True)
i = i + Mid(a, InStr(a, "到") + 1, InStr(a, "分") - InStr(a, "到") - 1)
Next
.[f35] = i
For Each a In Filter(Ar, .[e37], True)
k = k + Mid(a, InStr(a, "休") + 1, InStr(a, "分") - InStr(a, "休") - 1)
Next
.[f37] = k / 60
For Each a In Filter(Ar, .[e36], True)
j = j + Mid(a, InStr(a, "退") + 1, Len(a) - InStrRev(a, "分") + 1)
Next
.[f36] = j
End With
End Sub
複製代碼
作者:
tony0318
時間:
2011-8-11 18:01
真神奇!
Hsieh 的程式簡短扼要 小弟較無法理解!
GBKEE 的 讓我容易應用!!
戲法人人會變 手法巧妙各不同!!
感謝
我要如何讓所有工作表都執行這巨集?
原以為選擇所有工作表,再執行所要巨集即可!
我想法太單純了!!
作者:
GBKEE
時間:
2011-8-11 18:58
回復
12#
tony0318
With Sheets("sheet1") 指名 sheet1工作表
With ActiveSheet 作用中的工作表
作者:
tony0318
時間:
2011-8-15 08:23
抱歉!
我指的是如何一次針對檔案中所有工作表都執行相同的巨集,
原本想說選擇所有工作表後再執行巨集,
但只有第一個工作表有反應,
變成每一個員工我都要執行一次!
謝謝
作者:
GBKEE
時間:
2011-8-15 14:53
回復
14#
tony0318
是這樣嗎?
Sub Ex()
Dim Ar(), a, i As Integer, k As Integer, j As Integer
Dim Sh As Worksheet
For Each Sh In Sheets '工作表物件的集合 Sheets
With Sh 'Sheets("sheet1")
Ar = Application.Transpose(.Range("g2", .Range("g2").End(xlDown)))
.[F34] = UBound(Filter(Ar, .[e34], True)) + 1
For Each a In Filter(Ar, .[e35], True)
i = i + Mid(a, InStr(a, "到") + 1, InStr(a, "分") - InStr(a, "到") - 1)
Next
.[f35] = i
For Each a In Filter(Ar, .[e37], True)
k = k + Mid(a, InStr(a, "休") + 1, InStr(a, "分") - InStr(a, "休") - 1)
Next
.[f37] = k / 60
For Each a In Filter(Ar, .[e36], True)
j = j + Mid(a, InStr(a, "退") + 1, Len(a) - InStrRev(a, "分") + 1)
Next
.[f36] = j
End With
Next
Set Sh = Nothing
End Sub
複製代碼
作者:
tony0318
時間:
2011-8-15 17:35
不好意思!
這樣執行之後,會累計耶!
應該是單一工作表各別計算
如有5個人打卡會有5張工作表,但是是各別計算的!
謝謝!
[attach]7465[/attach]
作者:
GBKEE
時間:
2011-8-16 14:57
回復
16#
tony0318
沒有歸零 i = 0: k = 0: j = 0
Sub Ex()
Dim Ar(), a, i As Integer, k As Integer, j As Integer
Dim Sh As Worksheet
For Each Sh In Sheets '工作表物件的集合 Sheets
i = 0: k = 0: j = 0
With Sh 'Sheets("sheet1")
Ar = Application.Transpose(.Range("g2", .Range("g2").End(xlDown)))
.[F34] = UBound(Filter(Ar, .[e34], True)) + 1
For Each a In Filter(Ar, .[e35], True)
i = i + Mid(a, InStr(a, "到") + 1, InStr(a, "分") - InStr(a, "到") - 1)
Next
.[f35] = i
For Each a In Filter(Ar, .[e37], True)
k = k + Mid(a, InStr(a, "休") + 1, InStr(a, "分") - InStr(a, "休") - 1)
Next
.[f37] = k / 60
For Each a In Filter(Ar, .[e36], True)
j = j + Mid(a, InStr(a, "退") + 1, Len(a) - InStrRev(a, "分") + 1)
Next
.[f36] = j
End With
Next
Set Sh = Nothing
End Sub
複製代碼
作者:
tony0318
時間:
2011-8-18 16:05
感謝 GBKEE 的幫忙!!
這正是我要的!!
謝謝。
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)