標題:
依每日每站計算異常發生次數
[打印本頁]
作者:
totes
時間:
2011-4-7 22:08
標題:
依每日每站計算異常發生次數
請教各位高手
我現在負責的站點,機台可以撈取生產履歷
我想依每日,兩台機台(DASM20與DASM40)分別統計Mode(Mode0->正常;Mode 1~6->分別為異常種類)發生次數
附件說明
Sheet1為機台Raw Data
Sheet是我希望呈現之格式
想請教各位高手,這樣不知有沒有辦法用VBA來呈現[attach]5280[/attach]
作者:
yanto913
時間:
2011-4-8 19:46
我是用資料剖析把日期與時間分割後再用樞紐表作整理
作者:
totes
時間:
2011-4-11 07:54
感謝回覆
因目前等級仍無下載所提供的附件,但大致上應該知道內容使用的方法,沒猜錯的話應該使用樞紐分析->群組(By 日)
不過因為我們公司是7:00換班,所以資料也必須在7:00結算,如此使用樞紐分析的方法,可能不太行。
最近我在研究VBA撰寫方式,若有心得在分享給各位參考。
作者:
totes
時間:
2011-4-12 21:27
提供最近的心得,執行起來有點花時間
有沒有人可以幫我看看可不可以簡化或更好的方法
[attach]5335[/attach]
作者:
Hsieh
時間:
2011-4-13 22:30
回復
4#
totes
[attach]5343[/attach]
[attach]5344[/attach]
作者:
totes
時間:
2011-4-13 23:20
本帖最後由 totes 於 2011-4-13 23:29 編輯
版主你好
抱歉,沒說明得很仔細,因為公司7:00交換班,所以結算時間點為每日7:00,不是一般習慣的24:00
所以才造成次數的差異,所以應該是18次沒錯(如圖),感謝回覆。
[attach]5348[/attach]
[attach]5347[/attach]
作者:
Hsieh
時間:
2011-4-13 23:36
回復
6#
totes
Sub nn()
Dim A As Range
Set d = CreateObject("Scripting.Dictionary")
Set d1 = CreateObject("Scripting.Dictionary")
Set d2 = CreateObject("Scripting.Dictionary")
Set d3 = CreateObject("Scripting.Dictionary")
s = Sheet3.[E1]: n = Sheet3.[G1]
With Sheet2
For Each A In Range(.[A2], .[A65536].End(xlUp))
If A >= s And A <= n And A <> "" Then '在區間內
dy = DateValue(Format(A, "yyyy/m/d"))
t = TimeValue("07:00:00")
If TimeValue(Format(A, "hh:mm:ss")) < t Then dy = dy - 1
d3(dy) = ""
mystr = dy & A.Offset(, 1)
d1(mystr) = d1(mystr) + 1
If IsEmpty(d(mystr)) Then
ar = Array(0, 0, 0, 0, 0, 0, 0)
ay = Array(4, 3, 2, 1, 5, 6, 7)
k = Val(A.Offset(, 5))
If k <> 0 Then ar(ay(k - 1) - 1) = ar(ay(k - 1) - 1) + 1
d(mystr) = ar
ng = Application.Sum(ar)
ary = Array(dy, ng, ar(3), ar(2), ar(1), ar(0), ar(4), ar(5), ar(6), d1(mystr), ng / d1(mystr))
d2(mystr) = ary
Else
ar = d(mystr)
k = Val(A.Offset(, 5))
If k <> 0 Then ar(ay(k - 1) - 1) = ar(ay(k - 1) - 1) + 1
d(mystr) = ar
ng = Application.Sum(ar)
ary = Array(dy, ng, ar(0), ar(1), ar(2), ar(3), ar(4), ar(5), ar(6), d1(mystr), ng / d1(mystr))
d2(mystr) = ary
End If
End If
Next
End With
ak = Array("DASM20", "DASM40")
With Sheet4
For i = 0 To 1
r = 3
For Each ky In d3.keys
If Not IsEmpty(d2(ky & ak(i))) Then
.Cells(r, i * 10 + i + 1).Resize(, 11) = d2(ky & ak(i))
If i = 1 Then .Cells(r, 23) = .Cells(r, 19) / .Cells(r, 21)
Else
.Cells(r, i * 10 + i + 1).Resize(, 11) = Array(ky, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
If i = 1 Then .Cells(r, 23) = 0
End If
r = r + 1
Next
Next
End With
End Sub
複製代碼
作者:
totes
時間:
2011-4-14 07:53
感謝版主的幫忙,執行起來效率真的高很多。
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)