Board logo

標題: [發問] [已解決]條件式篩選 [打印本頁]

作者: planck_100    時間: 2011-10-7 20:58     標題: [已解決]條件式篩選

本帖最後由 planck_100 於 2011-10-14 18:37 編輯

我有一筆資料如下
     A        B       C       D
1  蘋果    果汁     杯       3
2  香蕉    零售     斤       7
3  蘋果    零售     顆       2
4  芭樂    零售     個       3
5  葡萄    果汁     杯       1
6  香蕉    零售     斤       2
7  鳳梨    果汁     個       9


A欄為水果名稱
B欄為用途
C欄為單位
D欄為數量

經過篩選後再第九列產生篩選後的數值(不重複,並統計)

       A        B       C       D
9    蘋果    果汁     杯       3
10  香蕉    零售     斤       9
11  蘋果    零售     顆       2
12  芭樂    零售     個       3
13  葡萄    果汁     杯       1
14  鳳梨    果汁     個       9


請問用VBA要如何實現?   謝謝各位不吝嗇指教。
作者: oobird    時間: 2011-10-7 22:53

  1. Sub xx()
  2. Set d = CreateObject("Scripting.Dictionary")
  3. a = [a1].CurrentRegion
  4. For i = 1 To UBound(a)
  5. k = a(i, 1) & a(i, 2)
  6. If Not d.exists(a(i, 1) & a(i, 2)) Then
  7. d(k) = Application.Index(a, i)
  8. Else
  9. d(k) = Array(d(k)(1), d(k)(2), d(k)(3), d(k)(4) + a(i, 4))
  10. End If
  11. Next
  12. [a9].Resize(d.Count, 4) = Application.Transpose(Application.Transpose(d.items))
  13. End Sub
複製代碼

作者: planck_100    時間: 2011-10-7 23:18

本帖最後由 planck_100 於 2011-10-7 23:28 編輯

謝謝您的指教。


程式已測試正常,再次感謝您的指導。
作者: planck_100    時間: 2011-10-7 23:59

本帖最後由 planck_100 於 2011-10-8 00:28 編輯

回復 2# oobird


    請教一個問題

[a9].Resize(d.Count, 4) = Application.Transpose(Application.Transpose(d.items))

A9 那個"9" 可以用變數取代嗎?



已解決

Range("a" & x).Resize(d.Count, 4) = Application.Transpose(Application.Transpose(d.items))
作者: dou10801    時間: 2020-11-6 16:27

請教各位前輩,為何新增到第10筆就會,錯誤,超出範圍,謝謝.
Sub 按鈕1_Click()
Set d = CreateObject("Scripting.Dictionary")
a = [a1].CurrentRegion

For i = 1 To UBound(a)
    k = a(i, 1) & a(i, 2)
    If Not d.exists(a(i, 1) & a(i, 2)) Then
       d(k) = Application.Index(a, i)
    Else
       d(k) = Array(d(k)(1), d(k)(2), d(k)(3), d(k)(4) + a(i, 4))
    End If
Next
'[a9].Resize(d.Count, 4) = Application.Transpose(Application.Transpose(d.items))
[f1].Resize(d.Count, 4) = Application.Transpose(Application.Transpose(d.items))
'Range("a" & x).Resize(d.Count, 4) = Application.Transpose(Application.Transpose(d.items))
End Sub




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