返回列表 上一主題 發帖

[發問] 多條件統計

本帖最後由 Andy2483 於 2023-12-4 16:28 編輯

謝謝論壇,謝謝各位前輩
後學藉此帖練習陣列.字典與橫向縱向排序...,學習方案如下,請各位前輩指教
資料表:


結果表執行前:


執行後的結果表:



Option Explicit
Sub TEST_A()
Dim Brr, Crr(2000, 100), v, Z, Q, i&, j%, R&, C%, N&, U%, T2$, T8$
Set Z = CreateObject("Scripting.Dictionary")
Brr = Range(Sheet2.[H1], Sheet2.[B65536].End(3)(1, 0))
For i = 5 To UBound(Brr)
   T2 = Trim(Brr(i, 2)): T8 = Trim(Brr(i, 8))
   If T2 = "" Or T8 = "" Then GoTo i01
   R = Z(T2): C = Z(T8): Crr(0, 0) = "日期"
   If R = 0 Then N = N + 1: R = N: Z(T2) = R: Crr(R, 0) = T2
   If C = 0 Then U = U + 1: C = U: Z(T8) = C: Crr(0, C) = T8
   Crr(R, C) = Crr(R, C) + 1
i01: Next
Sheet1.[B6:B2000].EntireRow.Delete
With Sheet1.[B6].Resize(N + 1, U + 2)
   .Value = Crr
   .Offset(0, 1).Sort KEY1:=.Item(1, 2), Order1:=1, Header:=0, Orientation:=2
   .Offset(1, 0).Sort KEY1:=.Item(2, 1), Order1:=1, Header:=0, Orientation:=1
   .Item(1)(2, U + 2).Resize(N, 1) = "=SUM(" & Range(.Cells(2, 2), .Cells(2, U + 1)).Address(0, 0) & ")"
   .Cells(1, U + 2) = "Total"
   .Borders.LineStyle = 1
End With
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

  1. Sub t5()
  2. i = Split("Provider=Microsoft.,Jet.OLEDB.4,.0;Extended Properties=Excel ,8,.0;Data Source=", ",")
  3. If Application.Version > 12 Then i(1) = "ACE.OLEDB.12": i(3) = 12
  4. Set cn = CreateObject("adodb.connection"): cn.Open Join(i, "") & ThisWorkbook.FullName
  5. Set S1 = Sheet1: Set s2 = Sheet2: S1.[B7:AA9999].ClearContents:
  6. f = " from [資料$B4:I] "
  7. S1.[B7].CopyFromRecordset cn.Execute("select distinct 日期,星期 " & f)
  8. S1.[P7].CopyFromRecordset cn.Execute("select distinct 日期,星期 " & f)
  9. p = Split("select b.c from [工作表2$B6:B] as a left join (;;) as b on a.日期=b.日期 ", ";")
  10. For Each Z In S1.[d6:L6]
  11. p(1) = "select 日期,星期,count(入口) as c " & f & " where 入口 = '" & Z.Value & "' group by 日期,星期,入口"
  12. Z.Offset(1, 0).CopyFromRecordset cn.Execute(Join(p, ""))
  13. x = x & "+ iif(IsNull(" & Z.Value & "),0," & Z.Value & ") "
  14. Next
  15. S1.[M7].CopyFromRecordset cn.Execute("select " & Mid(x, 2, 9999) & " from [工作表2$D6:L]")

  16. For Each Z In S1.[R6:Z6]
  17. p(1) = "select 日期,星期,count(出口) as c " & f & " where 出口 = '" & Z.Value & "' group by 日期,星期,出口"
  18. Z.Offset(1, 0).CopyFromRecordset cn.Execute(Join(p, ""))
  19. Next
  20. S1.[AA7].CopyFromRecordset cn.Execute("select " & Mid(x, 2, 9999) & " from [工作表2$R6:Z]")
  21. End Sub
複製代碼

TOP

        靜思自在 : 不怕事多,只怕多事。
返回列表 上一主題