返回列表 上一主題 發帖

[發問] 不同工作表,依日期區間條件加總

回復 10# quickfixer


謝謝您,我再來試看看

TOP

本帖最後由 准提部林 於 2022-6-18 12:36 編輯

合計格固定在各表B6
B1輸入:202201
C1輸入:202203
格式設為:0000年00月

B2//陣列公式(三鍵齊按)
=SUM(iferror(N(INDIRECT(TEXT(IF(ROW(1:36)<=MOD(C1-B1,88)+1,TEXT(B1,"0-00")+ROW(1:36)*31-31),"'yyyy年m月'\!B\6"))),0))

ROW(1:36)...最多從B1月份起算36個月

合計位置不固定
=SUM(iferror(SUMIF(INDIRECT(TEXT(IF(ROW(1:36)<=MOD(C1-B1,88)+1,TEXT(B1,"0-00")+ROW(1:36)*31-31),"'yyyy年m月'\!A:A")),"合計",INDIRECT(TEXT(IF(ROW(1:36)<=MOD(C1-B1,88)+1,TEXT(B1,"0-00")+ROW(1:36)*31-31),"'yyyy年m月'\!B:B"))),0))

TOP

本帖最後由 gaishutsusuru 於 2022-6-18 14:24 編輯

回復 12# 准提部林

謝謝准提部林大大,

經測試後,
第一個公式好像少寫了一個「\」,所以要加上去後才可以執行,修改後如下:
=SUM(iferror(N(INDIRECT(TEXT(IF(ROW(1:36)<=MOD(C1-B1,88)+1,TEXT(B1,"0-00")+ROW(1:36)*31-31),"'yyyy年m月'\!\B\6"))),0))

而第二個公式,好像無法成功執行,請問該如何修改呢,謝謝您。

TOP

本帖最後由 准提部林 於 2022-6-18 17:03 編輯

回復 13# gaishutsusuru


改成如下試試//
=SUM(iferror(SUMIF(INDIRECT(TEXT(IF(ROW(1:36)<=MOD(C1-B1,88)+1,TEXT(B1,"0-00")+ROW(1:36)*31-31),"'yyyy年m月'\!\A\:\A")),"合計",INDIRECT(TEXT(IF(ROW(1:36)<=MOD(C1-B1,88)+1,TEXT(B1,"0-00")+ROW(1:36)*31-31),"'yyyy年m月'\!\B\:\B"))),0))


=SUM(iferror(SUMIF(INDIRECT(TEXT(IF(ROW(1:36)<=MOD(C1-B1,88)+1,TEXT(B1,"0-00")+ROW(1:36)*31-31),"'yyyy年m月")&"'!A:A"),"合計",INDIRECT(TEXT(IF(ROW(1:36)<=MOD(C1-B1,88)+1,TEXT(B1,"0-00")+ROW(1:36)*31-31),"'yyyy年m月")&"'!B:B")),0))

================================
再修下//
=SUM(iferror(SUMIF(INDIRECT(TEXT(TEXT(B1,"0-00")+ROW(1:36)*31-31,"'yyyy年m月")&"'!A:A"),A2,INDIRECT(TEXT(TEXT(B1,"0-00")+ROW(1:36)*31-31,"'yyyy年m月")&"'!B:B"))/(ROW(1:36)<=MOD(C1-B1,88)+1),0))

TOP

本帖最後由 准提部林 於 2022-6-18 19:38 編輯

Sub 合計匯總()
Dim d0, d1, d2, S
d0 = CDate(Split([彙總!b1], "~")(0))
d1 = Format(Split([彙總!b1], "~")(0), "YYYYMM")
d2 = Format(Split([彙總!b1], "~")(1), "YYYYMM")
On Error Resume Next
For i = 0 To (d2 - d1) Mod 88
    S = S + Val(Sheets(Format(d0 + i * 31, "yyyy年m月")).[b65536].End(3))
Next i
[彙總!B2] = S
End Sub

TOP

本帖最後由 gaishutsusuru 於 2022-6-18 18:35 編輯
回復  gaishutsusuru


改成如下試試//
=SUM(iferror(SUMIF(INDIRECT(TEXT(IF(ROW(1:36)
准提部林 發表於 2022-6-18 14:42



非常感謝准提部林大大的幫忙,公式和巨集都可以用。:)

TOP

回復 16# gaishutsusuru


vba有修正, d1不可為date, 應為yyyymm格式才對!!

TOP

回復 17# 准提部林

您好,原本YYYYMM測試後是可以用的。若我將YYYYMM改為yyyymm,也是可以用的:

Sub 合計匯總()
Dim d0, d1, d2, S
d0 = CDate(Split([彙總!b1], "~")(0))
d1 = Format(Split([彙總!b1], "~")(0), "yyyymm")
d2 = Format(Split([彙總!b1], "~")(1), "yyyymm")
On Error Resume Next
For i = 0 To (d2 - d1) Mod 88
    S = S + Val(Sheets(Format(d0 + i * 31, "yyyy年m月")).[b65536].End(3))
Next i
[彙總!B2] = S
End Sub

請問原本的(YYYYMM)會造成哪個地方出錯呢?  謝謝您。

TOP

回復 18# gaishutsusuru


原來的
d1 = CDate(Split([彙總!b1], "~")(0))  > yyyy/m/d
d2 = CDate(Split([彙總!b1], "~")(1))  > yyyy/m/d
是"日期", 計算月差 (d2 - d1) Mod 88 , 是不對的 ,
須用quickfixer大大的 DateDiff("m", d1, d2)

TOP

        靜思自在 : 心中常存善解、包容、感思、知足、惜福。
返回列表 上一主題