返回列表 上一主題 發帖

[發問] 請問如何可統計出現次數並且包含多條件的資料刪除呢?

先將樞紐分析表內容貼至另一工作表!

Sub TEST()
Dim xArea As Range, xR As Range, xU As Range, xD, T$
Set xD = CreateObject("Scripting.Dictionary")
Set xArea = Range([B2], [B65536].End(xlUp))
'以BC欄值為KEY納入字典檔並累計次數 
For Each xR In xArea
 T = xR & xR(1, 2):  xD(T) = xD(T) + 1
Next
'檢查符合刪除條件者,納入 xU 儲存格聯集 
Set xU = xArea(xArea.Count + 1)
For Each xR In xArea
 T = xR & xR(1, 2)
 If xD(T) >= 20 And xR(1, 3) = "." Then Set xU = Union(xU, xR)
Next
'刪除 
xU.EntireRow.Delete
End Sub

TOP

回復 7# starry1314


請上傳檔案, 並模擬需求結果~~

TOP

回復 9# starry1314


Sub TEST()
Dim xArea As Range, xR As Range, xU As Range, xD, T$, i&
For i = 1 To 9 Step 4
  Set xD = CreateObject("Scripting.Dictionary")
  Set xArea = Range(Cells(2, i), Cells(Rows.Count, i).End(xlUp)(1, 4))
  For Each xR In xArea
    T = xR(1, 2) & xR(1, 3): xD(T) = xD(T) + 1
  Next
 
  Set xU = Cells(xArea.Rows.Count + 2, 1)
  For Each xR In xArea
    T = xR(1, 2) & xR(1, 3)
    If xD(T) >= 20 And xR(1, 4) = "." Then Set xU = Union(xU, xR.Resize(1, 4))
  Next
 
  If xU.Count > 1 Then xU.Delete Shift:=xlUp
Next i
End Sub

TOP

本帖最後由 准提部林 於 2015-11-28 10:57 編輯

回復 13# starry1314


Set xArea = Range(Cells(2, i), Cells(Rows.Count, i).End(xlUp)(1, 8))  

紅色部份請刪掉(一時筆誤.沒發現)!
取一個欄位即可,多了紅色部份,xArea就變成8個欄區∼∼

其它大致ok,就只看資料是否有固定架構,不然也是難以正確執行程式的!


下一行可自動偵測〔欄位〕數:
For i = 1 To Cells(1, Columns.Count).End(xlToLeft).Column Step 9

TOP

回復 15# starry1314


間隔4跳三次,1-5-9,再跳一次就13,所以 1 To 9 或 1 To 12 同樣∼∼

TOP

For Each xR In xArea
  If xR(1, 10) = "A" Then
   T = xR(1, 5) & xR(1, 6)
   xD(T) = xD(T) + 1
  End If
Next

非"A"時,不要處理即可!

TOP

        靜思自在 : 原諒別人就是善待自己。
返回列表 上一主題