Board logo

標題: 指定日期分類資料 [打印本頁]

作者: shan0948    時間: 2016-1-18 20:14     標題: 指定日期分類資料

請問各位先進,小弟有一表格,左邊資料會有104年及105年資料,右邊的表格要篩選列出105年的資料,並且按項目分類到右邊不同的子表內,公式設定既要指定年份日期又要按項目分類,實有難度,請各位指導小弟,謝謝![attach]23135[/attach]
作者: tku0216    時間: 2016-1-19 15:31

回復 1# shan0948

完成如附件~儲存格"O1"應改為"油"
[attach]23137[/attach]
作者: hcm19522    時間: 2016-1-19 16:59

G3=IFERROR(INDEX($A:$A,SMALL(IF((YEAR($A$2:$A$12)=2016)*($B$2:$B$12=OFFSET($G$1,,MAX(INT(COLUMN(A1)/4)*4))),ROW(A$2:A$12)),ROW(A1))),"")
H3=IFERROR(INDEX($C:$C,SMALL(IF((YEAR($A$2:$A$12)=2016)*($B$2:$B$12=OFFSET($G$1,,MAX(INT(COLUMN(B1)/4)*4))),ROW(B$2:B$12)),ROW(B1))),"")
I3=IFERROR(INDEX($E:$E,SMALL(IF((YEAR($A$2:$A$12)=2016)*($B$2:$B$12=OFFSET($G$1,,MAX(INT(COLUMN(C1)/4)*4))),ROW(C$2:C$12)),ROW(C1))),"")
差別$A:$A改$B:$B與$C:$C ,後圈選G3:I3複製到 ,K3 .O3 .S3....再分別下拉
作者: shan0948    時間: 2016-1-19 21:20

回復 3# hcm19522


    h大好,感恩回應指導,所列公式經測試後,因所要的資料是105年的,但 G3,H3,I3 所列出的是104年的資料,且下拉後儲存格都是空白,均無資料顯示,請問是那出問題了,謝謝!
作者: shan0948    時間: 2016-1-19 21:36

回復 2# tku0216


    t 大好,感謝回應指導,所列公式經測試後符合條件,解決了小弟的問題,謝謝感恩!
作者: hcm19522    時間: 2016-1-20 09:48

shift+ctrl+enter三鍵一起按
作者: shan0948    時間: 2016-1-20 10:03

回復 6# hcm19522


    h 大好,因原列公式未有提示是陣列公式,小弟會再測試,感恩謝謝!
作者: shan0948    時間: 2016-1-20 21:06

回復 6# hcm19522


    h 大好,經以陣列公式測試後完全正確,謝謝感恩!
作者: Andy2483    時間: 2024-1-11 14:17

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

輸入年分:
[attach]37276[/attach]

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

Option Explicit
Sub TEST()
Application.ScreenUpdating = False
Dim Brr, Crr(1 To 1000, 1 To 3), Z, A, i&, R&, j%, N%, Y$, T$, xR As Range
ActiveSheet.UsedRange.Offset(, 6).EntireColumn.Delete
Y = InputBox("請確認是否正確!", "請輸入彙整年分", Format(CDate(Format(Date, "YYYY/MM/") & 1) - 1, "YYYY"))
If StrPtr(Y) = 0 Then Exit Sub
If Not Y Like "####" Then MsgBox "請輸入正確格式年份": Exit Sub
Set Z = CreateObject("Scripting.Dictionary"): Set xR = [G1]
Brr = [A1].CurrentRegion
For i = 2 To UBound(Brr)
   If Not IsDate(Brr(i, 1)) Then GoTo i01
   If Format(Brr(i, 1), "YYYY") <> Y Then GoTo i01 Else T = Brr(i, 2)
   A = Z(T): R = Z(T & "/r")
   If Not IsArray(A) Then A = Crr: N = N + 1
   R = R + 1: A(R, 1) = Brr(i, 1): A(R, 2) = Brr(i, 3): A(R, 3) = Brr(i, 5)
   Z(T) = A: Z(T & "/r") = R
i01: Next
If N = 0 Then Exit Sub
For i = 0 To Z.Count - 1
   T = Z.KEYS()(i): If Not IsArray(Z(T)) Then GoTo i02
   With xR.Resize(2, 3)
      .Borders.LineStyle = xlContinuous
      .Cells(1) = T: .Cells(2) = "支出明細表": .Cells(4) = "日期": .Cells(5) = "摘要": .Cells(6) = "支出"
      For j = 7 To 10: .Borders(j).Weight = 4: Next
   End With
   xR.Interior.ColorIndex = 33: xR(2).Resize(, 3).Interior.ColorIndex = 1: xR(2).Resize(, 3).Font.ColorIndex = 2
   With xR(3).Resize(Z(T & "/r"), 3)
      .Value = Z(T)
      .Item(.Count + 2) = "合計"
      .Item(.Count + 3) = "=SUM(" & .Columns(3).Address & ")"
      .Borders.LineStyle = xlContinuous
      .ShrinkToFit = True
      For j = 7 To 10: .Borders(j).Weight = 4: Next
   End With
   Set xR = xR(, 5)
i02: Next
End Sub
作者: shan0948    時間: 2024-1-11 18:04

回復 9# Andy2483


    感謝A大的指導,使用後有問題再向A大請教,感恩!




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