返回列表 上一主題 發帖

請教篩選後數值加總

請教篩選後數值加總

本帖最後由 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 該怎麼寫?

祝新年快樂
50 字節以內
不支持自定義 Discuz! 代碼

回復 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
複製代碼
學海無涯_不恥下問

TOP

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

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

另外我用了一個 指令按鈕想做一鍵清除excel 頁面內容
我用很笨的方式做出來的
Private Sub CommandButton2_Click()
    Cells.Select
    Selection.Clear
    Range("A1").Select
End Sub
我想應該還有更好的方法才是?
50 字節以內
不支持自定義 Discuz! 代碼

TOP

回復 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
即可
學海無涯_不恥下問

TOP

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

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

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


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


我再研究程式碼
不懂的地方 請您多多指教
謝謝
50 字節以內
不支持自定義 Discuz! 代碼

TOP

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

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

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

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

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

謝謝
50 字節以內
不支持自定義 Discuz! 代碼

TOP

本帖最後由 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
卻出現 藍色那行錯誤

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

謝謝
50 字節以內
不支持自定義 Discuz! 代碼

TOP

回復 7# jasonwilliams


    請參閱VBA說明OFFSET
當在B欄作變數迴圈時a.offset(,-2)就會產生錯誤
學海無涯_不恥下問

TOP

        靜思自在 : 唯其尊重自己的人,才更勇於縮小自己。
返回列表 上一主題