Board logo

標題: [發問] 使用VBA或巨集進行累計次數 [打印本頁]

作者: jeff5424    時間: 2015-11-28 11:48     標題: 使用VBA或巨集進行累計次數

本帖最後由 GBKEE 於 2015-11-28 12:01 編輯

使用VBA或巨集進行累計次數                                                                                       
1.按"載入累計表"會自動統計次數                                                                                       
2. 名稱說明:    Tester No(欄位:A2) --> 機台編號         f12ad048(欄位:A4)--->機台號碼                                                                                       
3.累計次數說明:                                                                                       
   A.欄位C4方式:指定機台f12ad048(欄位:A4) 比對工作表"summary" 欄位D3~D5000 有出現機台f12ad048                                                                                       
        再比對比對工作表"summary" 欄位F3~F5000 , 日期時間在11月01 日 00:00~07:59出現累計次數                                                                                       
   B.欄位C5方式:指定機台f12ad048(欄位:A4) 比對工作表"summary" 欄位D3~D5000 有出現機台f12ad048                                                                                       
        再比對比對工作表"summary" 欄位F3~F5000 , 日期時間在11月01 日 08:00~15:59出現累計次數                                                                                       
   C.欄位C6方式:指定機台f12ad048(欄位:A4) 比對工作表"summary" 欄位D3~D5000 有出現機台f12ad048                                                                                       
        再比對比對工作表"summary" 欄位F3~F5000 , 日期時間在11月01 日 16:00~23:59出現累計次數                                                                                       
   D.欄位C7方式:指定機台f12ad048(欄位:A4) 比對工作表"summary" 欄位D3~D5000 有出現機台f12ad048                                                                                       
        再比對比對工作表"summary" 欄位F3~F5000 , 日期時間在11月01 日 00:00~23:59出現累計次數                                                                                       
4.將指定欄位完成統計累計次數                                                                                        
PS:如附件所示                                                                                       
請各位高手大哥協助....謝謝                                                                                       
作者: hcm19522    時間: 2015-11-28 16:01

=SUMPRODUCT((LOOKUP(1,0/($A$4:$A4<>""),$A$4:$A4)=summary!$D$3:$D$5000)*(INT(summary!$F$3:$F$5000)=D$2)*(LOOKUP(MOD(summary!$F$3:$F$5000,1),--MID($B$4:$B$6,3,5),ROW($1:$3))=ROW(B1)))
作者: hcm19522    時間: 2015-11-28 17:30

http://blog.xuite.net/hcm19522/twblog/360767792
參考
作者: jeff5424    時間: 2015-11-28 18:42

感謝hcm19522大大的幫忙.....謝謝
作者: jeff5424    時間: 2015-11-29 00:00

回復 3# hcm19522
hcm19522大大我測試還有問題,在麻煩大大再幫我看看.....謝謝
如附件所示
作者: hcm19522    時間: 2015-11-29 09:46

SUMPRODUCT(($A$2:$A$5000=LOOKUP(1,0/($D$2:$D2<>""),$D$2:$D2))*(INT($B$2:$B$5000)=F$1)*(LOOKUP(MOD($B$2:$B$5000,1),--MID($E$2:$E$4,3,5),ROW($1:$3))=ROW(A1)))
ROW(1:3)-->ROW($1:$3)
作者: hcm19522    時間: 2015-11-29 10:15

方式二 :程式後面ROW(A1)-->MOD(ROW(A1),4) 直接拉到位
F5=SUM(F2:F4) ,左拉到O5 ,F5分別複製到F9 ,F13 ,分別左拉到O9 ,O13 (版大格式SUM部分一一複製 往右拉)
以3#為例
3#有修改增列
作者: jeff5424    時間: 2015-11-29 10:52

回復 7# hcm19522
hcm195222大大,可能我比較笨,試不出來,可以麻煩大大幫我改原始檔嗎?
作者: hcm19522    時間: 2015-11-29 12:08

http://www.FunP.Net/186097
作者: jeff5424    時間: 2015-11-29 12:56

回復 9# hcm19522
感謝hcm19522大大的幫忙,我在測試看看.....謝謝
作者: 准提部林    時間: 2015-11-29 13:04

本帖最後由 准提部林 於 2015-11-29 13:05 編輯

Sub TEST()
Dim i&, R&, C&, xD, xArea As Range, Arr, xR As Range, X&, Y&, Z%
C = [IV2].End(xlToLeft).Column
R = [B65536].End(xlUp).Row
Set xD = CreateObject("Scripting.Dictionary")
For i = 4 To R Step 4:  xD(Cells(i, 1) & "") = i - 3: Next i  '取得〔Tester No〕的〔列位〕
For i = 3 To C:  xD(Format(Cells(2, i), "yyyy-mm-dd")) = i - 2: Next i '取得日期的〔欄位〕
Set xArea = [C4].Resize(R - 3, C - 2) '統計數值區
xArea.ClearContents: Arr = xArea '清除統計,以Arr代出
 
For Each xR In Range([summary!D3], [summary!D65536].End(xlUp))
  X = xD(xR.Value) '〔Tester No〕的〔列位〕
  Y = xD(Format(xR(1, 3), "yyyy-mm-dd")) '日期的〔欄位〕
  If X = 0 Or Y = 0 Then GoTo 101
  Z = Int(Hour(xR(1, 3)) / 8) '早午晚時段計算
  Arr(X + Z, Y) = Arr(X + Z, Y) + 1 '累計時段次數
  Arr(X + 3, Y) = Arr(X + 3, Y) + 1 '累計當日次數
101: Next
xArea = Arr
End Sub
作者: yen956    時間: 2015-11-29 17:54

請自行測試看看!!(資料太多)
  1. Private Sub CommandButton1_Click()
  2.    Dim LastR As Integer, I As Integer
  3.    Dim Rng As Range, fAddr As String
  4.    Dim Col1 As Integer, Off1 As Integer, H1 As Integer
  5.    LastR = [D65536].End(xlUp).Row
  6.    [F2:AI73] = ""
  7.    For I = 2 To LastR Step 4
  8.        Set Rng = [A:A].Find(Cells(I, 4), Lookat:=xlWhole)  '欄A 中尋找TesterNo
  9.        If Not Rng Is Nothing Then
  10.            fAddr = Rng.Address
  11.            Do
  12.                Col1 = Day(Rng.Offset(0, 1)) + 5
  13.                H1 = Hour(Rng.Offset(0, 1))
  14.                Off1 = IIf(H1 < 16, 1, 2)
  15.                If H1 < 8 Then Off1 = 0
  16.                Cells(I + Off1, Col1) = Cells(I + Off1, Col1) + 1
  17.                Cells(I + 3, Col1) = Cells(I + 3, Col1) + 1
  18.                Set Rng = [A:A].FindNext(Rng)   '尋找下一個TesterNo
  19.            Loop Until fAddr = Rng.Address      '直到下一個TesterNo的位置=第一個TesterNo的位置
  20.        End If
  21.    Next
  22. End Sub
複製代碼
[attach]22657[/attach]
作者: jeff5424    時間: 2015-11-29 20:08

回復 9# hcm19522
感謝hcm19522大大的幫忙,我在測試正常.....謝謝
作者: jeff5424    時間: 2015-11-29 20:22

回復 12# yen956
yen956 大大,我測試後不能用巨集/VBA,可以麻煩大大給我原始檔嗎....謝謝
作者: yen956    時間: 2015-11-30 08:12

回復 14# jeff5424
可能是巨集安全性的問題,
將巨集安全性調低就可以了.
[attach]22667[/attach]
作者: jeff5424    時間: 2015-11-30 20:11

回復 15# yen956
yen956 大大,我測試出現err(如圖所示),可以將excel檔嗎....謝謝
作者: yen956    時間: 2015-12-1 09:11

回復 16# jeff5424
舊VBA Code沒刪乾淨!!
將第一列刪除即可.

http://www.mediafire.com/download/8t334h19m3lr82m/%E7%B4%AF%E8%A8%88%E6%AC%A1%E6%95%B8.rar
作者: jeff5424    時間: 2015-12-1 20:56

回復 17# yen956
感謝yen956大大....測試OK.....謝謝




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