Board logo

標題: [發問] 請問如何加總表中指定日期(或期間) [打印本頁]

作者: 97forum    時間: 2012-8-31 10:58     標題: 請問如何加總表中指定日期(或期間)

如附表中,想要在H23根據F23所給予之年度數值加總其H欄之損益小計。
我採用下列函數方式計算不出,不知哪位先進可以予以教導指正一下。
=sumif(A3:H23,">=(F24)",H3:H23)
作者: Hsieh    時間: 2012-8-31 11:12

回復 1# 97forum


    =SUMPRODUCT((YEAR(A14:A23)=F24)*H14:H23)
作者: 97forum    時間: 2012-8-31 14:08

回復 2# Hsieh
謝謝先進的指導,另外想請教一個問題,如果給予的範圍中有無數值(或空白),就無法成立是這樣嗎?
所以如果有新數值加入空白儲存格時必須再去修改公式的範圍值或者是可以改其他方式?
作者: Hsieh    時間: 2012-8-31 14:33

回復 3# 97forum
H24陣列公式
=SUMPRODUCT((IF(ISNUMBER(INDIRECT("R2C1:R[-1]C1",0)),YEAR(INDIRECT("R2C1:R[-1]C1",0)),0)=F24)*INDIRECT("R2C:R[-1]C",0))
[attach]12343[/attach]
作者: ML089    時間: 2012-9-1 21:06

回復 2# Hsieh

此式改為

=SUMPRODUCT(--(YEAR(A14:A23)=F24),H14:H23)
作者: Hsieh    時間: 2012-9-2 00:31

回復 5# ML089

這樣遇到非日期時一樣會出錯
作者: ML089    時間: 2012-9-2 13:50

回復 2# Hsieh

改為下式,遇到非日期就不會發生錯誤

=SUMPRODUCT(--(TEXT(A14:A23,"yyyy")=F24&""),H14:H23)
作者: Hsieh    時間: 2012-9-3 11:14

回復 7# ML089


    =SUMPRODUCT((TEXT($A$2:$A23,"yyyy")=$F24&"")*($H$2:$H23))
作者: ML089    時間: 2012-9-3 12:26

回復 8# Hsieh

還是版主厲害,改了好幾次都改錯,希望沒誤導他人
作者: 97forum    時間: 2012-9-24 14:29

回復  ML089


    =SUMPRODUCT((TEXT($A$2A23,"yyyy")=$F24&"")*($H$2H23))
Hsieh 發表於 2012-9-3 11:14



    謝謝您的幫忙,可是經過測試,在日期欄位中如果是空白(或者是null值)其結果仍然是錯誤的。我還在研究了解您所提供的函數結構。無論如何還是謝謝先進的教導。
作者: Hsieh    時間: 2012-9-24 18:16

回復 10# 97forum
有可能你SUMPRODUCT函數內的陣列大小不同
作者: ML089    時間: 2012-9-24 19:33

回復 10# 97forum

[attach]12599[/attach]

1. 將24列設為為空白列,以後選24列按右鍵 - 插入 新增一列
2. F25 = 2008,F26 = 2009,F27 = 2010
3. H25公式,請改為下式再試試看
=SUMPRODUCT(--(TEXT(A$2:A$24,"yyyy")=F25&""),H$2:H$24)
公式往下複製

公式避免錯誤建議
1. YEAR() 改為 TEXT() 可避免 A欄 有文字時之錯誤
2. SUMPRODUCT(判斷*數值) 改為 SUMPRODUCT(--判斷,數值),可避免 H欄 有文字時之錯誤
作者: JBY    時間: 2012-9-28 21:42

陣列公式

{=SUM(IF(ISNUMBER($A$2:$A23),(--TEXT($A$2:$A23,"yyyy")=$F24)*($H$2:$H23)))}
作者: Andy2483    時間: 2023-12-14 16:15

謝謝論壇,謝謝各位前輩
後學藉此帖練習陣列與字典,學習方案如下,請各位前輩指教
執行前:
[attach]37131[/attach]

執行結果:
[attach]37132[/attach]

Option Explicit
Sub TEST()
Dim Brr, Crr, Z, i&, R&, Y$, N&, J&, V&, T$, xA As Range
'↑宣告變數
Set Z = CreateObject("Scripting.Dictionary")
'↑令Z變數是 字典
Set xA = Range([H1], [A65536].End(3)): Brr = xA
'↑令xA變數是 指定範圍儲存格(物件),令Brr變數是寫入xA變數(儲存格)值的二維陣列
ReDim Crr(1 To 1000, 1 To 3)
'↑宣告Crr變數是 二維空陣列,索引號~1000列,1~3欄
For i = 2 To UBound(Brr)
'↑設順迴圈!i從2 到Brr陣列縱向最大索引列號
   Y = Format(Brr(i, 1), "YYYY"): If Y = "" Then GoTo i01 Else R = Z(Y)
   '↑令Y變數是日期的4碼年份字串,如果Y變數是 空字元,就跳到標示 i01位置繼續執行,
   '否則就令R變數是以Y變數查Z字典回傳item值

   If R = 0 Then N = N + 1: R = N: Z(Y) = R: Brr(R, 1) = Y: Brr(R, 2) = "年度小計": Brr(R, 3) = 0
   '↑如果此年分是首次納入Z字典!就令N累積Brr陣列放結果列數,
   '以年分為key,item是列號,納入Z字典,
   '令Brr陣列結果列第2欄陣列值是 "年度小計"字串,令原來Brr陣列資料值設為0

   Brr(R, 3) = Brr(R, 3) + Val(Brr(i, 8))
   '↑令Brr陣列結果列第3欄累加 金額
   T = Trim(Brr(i, 3)): If T = "" Then GoTo i01 Else V = Z(T)
   '↑令T變數是 股票名稱字串,如果T變數是 空字元,就跳到標示 i01位置繼續執行,
   '否則就令V變數是以T變數查Z字典回傳item值

   If V = 0 Then J = J + 1: V = J: Z(T) = V: Crr(V, 1) = T: Crr(V, 2) = "歷史總計"
   '↑如果股票名稱是首次納入Z字典!就令J累積Crr陣列放結果列數,
   '以股票名稱為key,item是列號,納入Z字典,
   '令Crr陣列結果列第2欄陣列值是 "歷史總計"字串

   Crr(V, 3) = Crr(V, 3) + Val(Brr(i, 8))
   '↑令Crr陣列結果列第3欄累加 金額
i01: Next
ActiveSheet.UsedRange.Offset(xA.Rows.Count).ClearContents
'↑令舊的結果列清除內容
If N = 0 Then Exit Sub
'↑如果年分統計沒有資料!就結束程式執行
xA(xA.Count + 6).Resize(N, 3) = Brr
'↑令年分統計資料寫入儲存格
If J = 0 Then Exit Sub
'↑如果股票名稱歷史總計沒有資料!就結束程式執行
[A65536].End(3)(N + 3, 6).Resize(J, 3) = Crr
'↑令股票名稱歷史總計統計資料寫入儲存格
End Sub




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