返回列表 上一主題 發帖

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

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

如何設定能將左方原始資料
1.同類別內同品名相同者且數量大於20的
.並且備註欄只有【.】的資料列刪除呢?

主要卡在不知該如何統計此出現次數大於20的項目做刪除

多條件判斷刪除.zip (12.72 KB)

http://blog.xuite.net/hcm19522/twblog/348638247

TOP

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

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

真是受用,感謝分享!!

TOP

回復 3# 准提部林


    感謝~真是好用!可用在很多地方

TOP

回復 2# hcm19522


    謝謝∼提供函數用法

TOP

回復 3# 准提部林
版大∼不好意思 遇到個問題 
再刪除資料時可設定範圍嗎? 因同一活頁內有三張表格,目前此代碼會刪除整列導致另外兩張資料也一併刪除了

如像下列這種 只刪除篩選範圍內資料
  1. With Sheets("數據(早餐)")
  2.         .Select
  3.         .Range("$A$1:AA5000").AutoFilter Field:=6, Criteria1:=Array( _
  4.         "紅茶", "奶茶", "0"), Operator:=xlFilterValues
  5.         
  6.         With .AutoFilter.Range
  7.             .Offset(1).Resize(.Rows.Count).SpecialCells(xlCellTypeVisible).ClearContents
  8.             .AutoFilter
  9.         End With
  10.         
  11.     End With
複製代碼

TOP

回復 7# starry1314


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

TOP

多條件判斷刪除.rar (16.02 KB) 回復 8# 准提部林

結果是跟以下代碼一樣的,只是說不要刪除整列 只刪除指定範圍內的資料
  1. Sub TEST()
  2. Dim xArea As Range, xR As Range, xU As Range, xD, T$
  3. Set xD = CreateObject("Scripting.Dictionary")
  4. Set xArea = Range([B2], [B65536].End(xlUp))
  5. '以BC欄值為KEY納入字典檔並累計次數 
  6. For Each xR In xArea
  7.  T = xR & xR(1, 2):  xD(T) = xD(T) + 1
  8. Next
  9. '檢查符合刪除條件者,納入 xU 儲存格聯集 
  10. Set xU = xArea(xArea.Count + 1)
  11. For Each xR In xArea
  12.  T = xR & xR(1, 2)
  13.  If xD(T) >= 20 And xR(1, 3) = "." Then Set xU = Union(xU, xR)
  14. Next
  15. '刪除 
  16. xU.EntireRow.Delete
  17. End Sub
複製代碼

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

        靜思自在 : 人生最大的成就是從失敗中站起來。
返回列表 上一主題