Board logo

標題: 使用VBA求資料統計輸出 [打印本頁]

作者: b9208    時間: 2011-2-24 00:08     標題: 使用VBA求資料統計輸出

各位先進前輩
請教如何設計VBA程式來執行。
計算〞資料表〞內地區及姓名相同之次數,並輸出於〞統計表〞中。
非常感謝協助
[attach]4844[/attach]
作者: hugh0620    時間: 2011-2-24 09:41

回復 1# b9208


    寫得很爛~ 但還是可以依你設的條件完成~
    版主大大會有更好的寫法  我的寫法是初學者的寫法唷~ 僅供參考

   [attach]4845[/attach]
作者: b9208    時間: 2011-2-24 10:50

回復 2# hugh0620

[attach]4846[/attach]
謝謝前輩指導
目前測試OK
另請教如下條件:
一、【輸出小計】:只輸出台北、屏東、新竹地區 (D3:F3)
二、【輸出合計】:輸出所有地區
請參閱統計表
Thanks
作者: Hsieh    時間: 2011-2-24 12:02

回復 3# b9208
附件內樞紐分析表方法供你參考[attach]4850[/attach]
  1. Private Sub CommandButton1_Click()
  2. Set d = CreateObject("Scripting.Dictionary")
  3. Set d1 = CreateObject("Scripting.Dictionary")
  4. Set d2 = CreateObject("Scripting.Dictionary")
  5. With Sheet3
  6.    For Each a In .Range(.[B6], .[B65536].End(xlUp))
  7.       ar = Array(a, a.Offset(, 2), a.Offset(, 3), "")
  8.       d(a.Offset(, 3).Value) = d(a.Offset(, 3).Value) + 1
  9.       ar(3) = d(a.Offset(, 3).Value)
  10.       d1(a.Offset(, 3).Value) = ar
  11.       d2(a.Value) = d2(a.Value) + 1
  12.     Next
  13. End With
  14. With Sheets("統計表")
  15. .[B7:F65536] = ""
  16. .[B7].Resize(d1.Count, 4) = Application.Transpose(Application.Transpose(d1.items))
  17. .[B6].Resize(d1.Count + 1, 4).Sort key1:=.[B7], key2:=.[C7], header:=xlYes
  18. .[G7:H65536] = ""
  19. .[G7].Resize(d2.Count, 1) = Application.Transpose(d2.keys)
  20. .[H7].Resize(d2.Count, 1) = Application.Transpose(d2.items)
  21. .[G6].Resize(d2.Count + 1, 2).Sort key1:=.[G7], header:=xlYes
  22. .Select
  23. End With
  24. End Sub
複製代碼

作者: b9208    時間: 2011-2-24 21:28

回復 4# Hsieh
謝謝版主
程式測試可以
樞紐分析表方法目前學習中
作者: aa7551    時間: 2011-2-26 17:51

版主,請教With Sheet3    For Each a In .Range(.[B6], .[B65536].End(xlUp))..... End With
sheet的順序應為:統計表,資料表,樞紐分析表,在此時使用sheet3,不是應為樞紐分析表嗎?請解答迷津
作者: b9208    時間: 2011-2-26 18:32

回復 6# aa7551

請進入〞程式檢視碼〞查看
sheet2 (統計表)
sheet3 (資料表)
sheet 4 (樞紐分析表)
不一定第一個工作表就是sheet1
作者: Hsieh    時間: 2011-2-26 18:32

回復 6# aa7551


    Sheet3是資料表的CodeName
[attach]4877[/attach]
作者: aa7551    時間: 2011-2-26 20:28

學習了,以前總認為是工作表的排列順序為主,受教了,謝謝
作者: GBKEE    時間: 2011-2-27 14:50     標題: RE: 工作表的排列順序

回復 6# aa7551
  1. Sub Ex()
  2. Dim i As Integer
  3. For i = 1 To Sheets.Count
  4.     MsgBox Sheets(i).Name
  5. Next
  6. End Sub
複製代碼

如圖:

[attach]4881[/attach]
作者: aa7551    時間: 2011-2-27 17:57

再次感謝版本的教導,基本功要多加練習,才能更進步
作者: b9208    時間: 2012-3-9 20:03

回復 4# Hsieh
Hsieh 前輩您好

使用後發現只要〞員工編號〞相同,則統計為一筆資料,不會比較〞地區〞及〞姓名〞二欄資料。
需求是〞地區、姓名及員工編號〞等三欄資料相同統計資料。
懇請指導
謝謝

[attach]9931[/attach]
作者: Hsieh    時間: 2012-3-9 20:25

回復 12# b9208
  1. Private Sub CommandButton1_Click()
  2. Set d = CreateObject("Scripting.Dictionary")
  3. Set d1 = CreateObject("Scripting.Dictionary")
  4. Set d2 = CreateObject("Scripting.Dictionary")
  5. With Sheet3
  6.    For Each a In .Range(.[B6], .[B65536].End(xlUp))
  7.       ar = Array(a, a.Offset(, 2), a.Offset(, 3), "")
  8.      m = Join(ar)
  9.       d(m) = d(m) + 1 '3欄統計
  10.       ar(3) = d(m)
  11.       d1(m) = ar
  12.       d2(a.Value) = d2(a.Value) + 1 '地區統計
  13.     Next
  14. End With
  15. With Sheets("統計表")
  16. .[B7:F65536] = ""
  17. .[B7].Resize(d1.Count, 4) = Application.Transpose(Application.Transpose(d1.items))
  18. .[B6].Resize(d1.Count + 1, 4).Sort key1:=.[B7], key2:=.[C7], header:=xlYes
  19. .[G7:H65536] = ""
  20. .[G7].Resize(d2.Count, 1) = Application.Transpose(d2.keys)
  21. .[H7].Resize(d2.Count, 1) = Application.Transpose(d2.items)
  22. .[G6].Resize(d2.Count + 1, 2).Sort key1:=.[G7], header:=xlYes
  23. .Select
  24. End With
  25. End Sub
複製代碼

作者: b9208    時間: 2012-3-9 22:13

回復 13# Hsieh
謝謝版主
執行OK
作者: ching12a    時間: 2012-7-30 14:52

剛好需要怎樣統計資料表數字
作者: c_c_lai    時間: 2012-7-30 15:38

回復 13# Hsieh
請教Hsieh大,您那 Sheet4("樞紐分析")部分之內容,
如何以 VBA 來展現 (實現) 呢? 謝謝您!
作者: Hsieh    時間: 2012-7-30 18:47

回復 16# c_c_lai
可利用錄製巨集來取得VBA代碼
這樣可同時熟悉EXCEL的基本操作
您不妨先試試看
作者: character    時間: 2014-6-24 11:11

請問要如何使用樞紐單純只針對總計做直條圖呢?
現在都會一併把細項列到直條圖了
感謝
作者: ianlcc    時間: 2014-6-25 11:16

謝謝您的分享,這可以當作學習的經驗!




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