Board logo

標題: [發問] excel統計公式運算過久問題 [打印本頁]

作者: msmplay    時間: 2018-10-14 00:34     標題: excel統計公式運算過久問題

[attach]29529[/attach]

請問是否有辦法解決統計公式造成運算過久的問題,例如修改公式或使用巨集加速運算
因為只要篩選條件,一等就要5-10分鐘才會重新統計數據完成,實在是太久了
再來是數據來源的資料未來會每月向下新增,資料越多會等更久吧!!求解~~~~~~~~~~

說明:
【統計】活頁上方可篩選條件,以篩選所需年月及統計數據,另使用以下公式統計【數據來源】活頁數據
=SUMPRODUCT(數據來源!$D$6:$OC$1299*(數據來源!$OD$6:$OD$1299>=$D$1)*(數據來源!$OD$6:$OD$1299<=$F$1)*(數據來源!$C$6:$C$1299=E$4)*(數據來源!$D$4:$OC$4=$D5)*(數據來源!$D$5:$OC$5=$H$1))


【數據來源】活頁每月資料會向下堆疊,所以資料範圍會越來越大,例如未來可能到2000或5000


[attach]29530[/attach]

作者: 准提部林    時間: 2018-11-23 10:29

這應可用vba處理,
建議將來源資料的欄位刪去一些, 大約保留100欄左右即可(我的版本無法用這麼多欄),
並將統計公式先貼成值或清空, 以免開啟時造成卡檔!
有必要時, 將統計規則逐一說明~~

我將這帖轉到程式區, 讓大家參考幫幫忙!!!

如果這問題已不需要解決, 就算了~~
作者: n7822123    時間: 2018-11-24 02:52

本帖最後由 n7822123 於 2018-11-24 02:53 編輯

回復 1# msmplay

看你的公式,你應該只是想把符合各種條件的部分做加總而已,

剛剛把你的檔案另存成.xls,但是只有256攔,你的數據來源被強迫腰斬@@,公式也錯誤了

先附上來,VBA是做得到的,雖然你的條件有點多~~~明天選舉要先來睡了,如果沒人幫你,我可以試看看(我新版Excel)

[attach]29718[/attach]
作者: n7822123    時間: 2018-11-24 18:23

本帖最後由 n7822123 於 2018-11-24 18:34 編輯

回復 3# n7822123


按下統計按鈕即可,我的電腦速度幾秒鐘即可完成
[attach]29719[/attach]

Sub 統計()
Dim Arr, 區首列, 區列數, d As Object
Dim 型號$, 日期$, 店名$, 類型$, Str$, 區首列串$, 區列數串$
Dim 日期起&, 日期終&, i%, R%, C%, Rn%, Cn%, 區數%
Application.ScreenUpdating = False
Set d = CreateObject("scripting.dictionary")
日期起 = [統計!D1]: 日期終 = [統計!F1]
類型 = [統計!H1]
'====輸入資料到字典,字典的Key依店名、型號做區分====
'==========依類型做篩選,並依日期加總==========
Sheets("數據來源").Activate
Arr = Range([C4], Cells(Rows.Count, 394).End(xlUp))
Rn = UBound(Arr): Cn = UBound(Arr, 2) - 1
For R = 3 To Rn: For C = 2 To Cn
  店名 = Arr(1, C): 型號 = Arr(R, 1)
  日期 = Arr(R, 392): Str = 店名 & "," & 型號
  If Arr(2, C) = 類型 And 日期 >= 日期起 And 日期 <= 日期終 Then d(Str) = d(Str) + Arr(R, C)
Next: Next
'============輸出字典資料到統計工作表============
Sheets("統計").Activate
Rn = Cells(Rows.Count, 2).End(xlUp).Row
For R = 1 To Rn    '先判斷出各小區(合併儲存格)的首列與列數
  If Cells(R, 2) Like "*區" Then
    區首列串 = 區首列串 & "," & R
    區列數串 = 區列數串 & "," & Cells(R, 2).MergeArea.Rows.Count - 1  '扣掉小計列
    區數 = 區數 + 1
  End If
Next R
區首列 = Split(區首列串, ","): 區列數 = Split(區列數串, ",")  '拆成陣列
Cn = [E4].End(2).Column - 4   '統計表要輸入資料的欄數
For i = 1 To 區數  '從字典比對key並輸出資料到相應欄列
  Arr = Cells(區首列(i), 5).Resize(區列數(i), Cn)
  For C = 1 To Cn: For R = 1 To 區列數(i)
    店名 = Cells(R + 4, 4): 型號 = Cells(4, C + 4)
    Arr(R, C) = d(店名 & "," & 型號)
  Next R: Next C
  Cells(區首列(i), 5).Resize(區列數(i), Cn) = Arr
  Cells(Val(區首列(i)) + Val(區列數(i)), 5).Resize(, Cn) = "=sum(R[-" & 區列數(i) & "]C:R[-1]C)"   '小計列公式(Sum.....)
Next i
End Sub

[attach]29725[/attach]




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