返回列表 上一主題 發帖

[發問] [已解決]條件式篩選

[發問] [已解決]條件式篩選

本帖最後由 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要如何實現?   謝謝各位不吝嗇指教。

  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
複製代碼

TOP

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

謝謝您的指教。


程式已測試正常,再次感謝您的指導。

TOP

本帖最後由 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))

TOP

請教各位前輩,為何新增到第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
杜小平

TOP

        靜思自在 : 生氣,就是拿別人的過錯來懲罰自己。
返回列表 上一主題