Board logo

標題: 請教篩選後數值加總 [打印本頁]

作者: jasonwilliams    時間: 2011-2-2 20:11     標題: 請教篩選後數值加總

本帖最後由 jasonwilliams 於 2011-2-2 22:32 編輯

請問我想 篩選出 C 欄位相同的資料(資料大約有300多筆)
再把  D 欄位的數值加總
之後,C欄位其餘相同資料刪除
只留一筆篩選後的資料  

原始
     A   B   C   D .  .   .  
1 a  x   w  5
2   b  x   w  4
3 c  x    b  5
4 d  x   e     6
5 e  x   b     7
.
.

結果
     A   B   C   D .  .   .  
1 a  x   w  9
2   c  x    b  12
3 d  x   e     6
4 
5 
.
.
請問用VBA 該怎麼寫?

祝新年快樂
作者: Hsieh    時間: 2011-2-3 08:08

回復 1# jasonwilliams
  1. Sub Ex()
  2. Set d = CreateObject("Scripting.Dictionary")
  3. For Each a In Range([C1], [C65536].End(xlUp))
  4.    If d.exists(a.Value) = False Then
  5.       d(a.Value) = Array(a.Offset(, -2).Value, a.Offset(, -1).Value, a.Value, a.Offset(, 1).Value)
  6.       Else
  7.       ar = d(a.Value)
  8.       ar(3) = ar(3) + a.Offset(, 1).Value
  9.       d(a.Value) = ar
  10.     End If
  11. Next
  12. Columns("A:D") = ""
  13. [A1].Resize(d.Count, 4) = Application.Transpose(Application.Transpose(d.items))
  14. End Sub
複製代碼

作者: jasonwilliams    時間: 2011-2-3 14:44

本帖最後由 jasonwilliams 於 2011-2-3 17:34 編輯

版主您好
程式碼可以使用 感謝
(雖然我看不太懂,我會盡力去學習):D

另外我用了一個 指令按鈕想做一鍵清除excel 頁面內容
我用很笨的方式做出來的
Private Sub CommandButton2_Click()
    Cells.Select
    Selection.Clear
    Range("A1").Select
End Sub
我想應該還有更好的方法才是?
作者: Hsieh    時間: 2011-2-3 16:51

回復 3# jasonwilliams
  1. Private Sub CommandButton2_Click()
  2. '這裡插入你錄製的區段
  3. Set d = CreateObject("Scripting.Dictionary")
  4. For Each a In Range([C1], [C65536].End(xlUp))
  5.    If d.exists(a.Value) = False Then
  6.       d(a.Value) = Array(a.Offset(, -2).Value, a.Offset(, -1).Value, a.Value, a.Offset(, 1).Value)
  7.       Else
  8.       ar = d(a.Value)
  9.       ar(3) = ar(3) + a.Offset(, 1).Value
  10.       d(a.Value) = ar
  11.     End If
  12. Next
  13. Columns("A:D") = ""
  14. [A1].Resize(d.Count, 4) = Application.Transpose(Application.Transpose(d.items))
  15. End Sub
複製代碼
清除部份
Cells.Clear
即可
作者: jasonwilliams    時間: 2011-2-3 17:12

本帖最後由 jasonwilliams 於 2011-2-3 20:09 編輯

不好意思
剛剛試了很久
讓我試出來了

編輯完本文
才看到版主已回文


另外:
因為原始資料中我只要特定幾欄資料 例如: D欄 到 E欄 + 單獨 G欄
我的做法是 copy 到 Sheet2 之後
再把sheet1 其餘資料刪除
sheet2 複製到 sheet1
再做篩選加總
不知道有無方法可以不用到 sheet2 就可達成?


我再研究程式碼
不懂的地方 請您多多指教
謝謝
作者: jasonwilliams    時間: 2011-2-5 23:03

不好意思
小弟又有新的問題
因為不想浪費版本
我就po在這了

請問我想做一個 指令按鈕
按下去會貼上複製的資料

Range("A1").PasteSpecial
我用上面的語法
使用者如果有複製資料的話
可以正常貼上

如果沒複製資料的話
會顯示 " Class Range 的 PasteSpecial 方法失敗 "

請問是我用錯語法
還是該怎麼寫才能判斷是否有複製資料

謝謝
作者: jasonwilliams    時間: 2011-2-8 22:54

本帖最後由 jasonwilliams 於 2011-2-8 22:56 編輯

回復 2# Hsieh [code]

  Set D = CreateObject("Scripting.Dictionary")
            For Each a In Range([c1], [c65536].End(xlUp))
            If D.exists(a.Value) = False Then
            D(a.Value) = Array(a.Offset(, -2).Value, a.Offset(, -1).Value, a.Value, a.Offset(, 1).Value)
            Else
            ar = D(a.Value)
            ar(3) = ar(3) + a.Offset(, 1).Value
            D(a.Value) = ar
            End If
            Next

            Columns("A:D") = ""
            [A1].Resize(D.Count, 4) = Application.Transpose(Application.Transpose(D.items))

           

不好意思  
我現在想篩選 B 欄位的資料
我更改 紅色部份 C 改成 B
卻出現 藍色那行錯誤

請問我是少更改哪邊了?
小的不才,看不太懂程式碼
請版主再次相救

謝謝
作者: Hsieh    時間: 2011-2-8 23:11

回復 7# jasonwilliams


    請參閱VBA說明OFFSET
當在B欄作變數迴圈時a.offset(,-2)就會產生錯誤




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