Board logo

標題: 依每日每站計算異常發生次數 [打印本頁]

作者: 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
  1. Sub nn()
  2. Dim A As Range
  3. Set d = CreateObject("Scripting.Dictionary")
  4. Set d1 = CreateObject("Scripting.Dictionary")
  5. Set d2 = CreateObject("Scripting.Dictionary")
  6. Set d3 = CreateObject("Scripting.Dictionary")
  7. s = Sheet3.[E1]: n = Sheet3.[G1]
  8. With Sheet2
  9.    For Each A In Range(.[A2], .[A65536].End(xlUp))
  10.        If A >= s And A <= n And A <> "" Then '在區間內
  11.            dy = DateValue(Format(A, "yyyy/m/d"))
  12.            t = TimeValue("07:00:00")
  13.            If TimeValue(Format(A, "hh:mm:ss")) < t Then dy = dy - 1
  14.            d3(dy) = ""
  15.            mystr = dy & A.Offset(, 1)
  16.            d1(mystr) = d1(mystr) + 1
  17.            If IsEmpty(d(mystr)) Then
  18.               ar = Array(0, 0, 0, 0, 0, 0, 0)
  19.               ay = Array(4, 3, 2, 1, 5, 6, 7)
  20.               k = Val(A.Offset(, 5))
  21.               If k <> 0 Then ar(ay(k - 1) - 1) = ar(ay(k - 1) - 1) + 1
  22.               d(mystr) = ar
  23.               ng = Application.Sum(ar)
  24.               ary = Array(dy, ng, ar(3), ar(2), ar(1), ar(0), ar(4), ar(5), ar(6), d1(mystr), ng / d1(mystr))
  25.               d2(mystr) = ary
  26.               Else
  27.               ar = d(mystr)
  28.               k = Val(A.Offset(, 5))
  29.               If k <> 0 Then ar(ay(k - 1) - 1) = ar(ay(k - 1) - 1) + 1
  30.               d(mystr) = ar
  31.               ng = Application.Sum(ar)
  32.               ary = Array(dy, ng, ar(0), ar(1), ar(2), ar(3), ar(4), ar(5), ar(6), d1(mystr), ng / d1(mystr))
  33.               d2(mystr) = ary
  34.             End If
  35.         End If
  36.     Next
  37. End With
  38. ak = Array("DASM20", "DASM40")
  39. With Sheet4
  40. For i = 0 To 1
  41. r = 3
  42.     For Each ky In d3.keys
  43.     If Not IsEmpty(d2(ky & ak(i))) Then
  44.        .Cells(r, i * 10 + i + 1).Resize(, 11) = d2(ky & ak(i))
  45.        If i = 1 Then .Cells(r, 23) = .Cells(r, 19) / .Cells(r, 21)
  46.        Else
  47.        .Cells(r, i * 10 + i + 1).Resize(, 11) = Array(ky, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
  48.        If i = 1 Then .Cells(r, 23) = 0
  49.     End If
  50.        r = r + 1
  51.     Next
  52. Next
  53. End With
  54. End Sub
複製代碼

作者: totes    時間: 2011-4-14 07:53

感謝版主的幫忙,執行起來效率真的高很多。




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)