返回列表 上一主題 發帖

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

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

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

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

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

回復 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

多條件判斷刪除.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

回復 10# 准提部林


   
Sub TEST()
Dim xArea As Range, xR As Range, xU As Range, xD, T$, i&
For i = 1 To 9 Step 4 '請問這個9的意思是?  知道後面的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

回復 10# 准提部林

版大~不好意思 現欄位有增加,試過後改不太出來  
只會刪除部份資料 第一表格會全刪,第二、三表格只會刪除部份資料
    多條件判斷刪除-2.rar (92.51 KB)

TOP

回復 10# 准提部林
目前改為這樣可達成效果,不知是否有不妥的地方
Sub 標籤()
Dim xArea As Range, xR As Range, xU As Range, xD, T$, i&
For i = 1 To 28 Step 9
    Set xD = CreateObject("Scripting.Dictionary")
    Set xArea = Range(Cells(2, i), Cells(Rows.Count, i).End(xlUp)(1, 8))
    For Each xR In xArea
        T = xR(1, 5) & xR(1, 6): xD(T) = xD(T) + 1
    Next

    Set xU = Cells(xArea.Rows.Count + 2, 1)
    For Each xR In xArea
        T = xR(1, 5) & xR(1, 6)
        If xD(T) >= 20 And xR(1, 8) = "." Then Set xU = Union(xU, xR.Resize(1, 9))
    Next

    If xU.Count > 1 Then xU.Delete Shift:=xlUp
Next i
End Sub

TOP

回復 14# 准提部林


    感謝~完美達到所要的效果 !!
自動偵測欄位好用多了,
不過不懂為何第一次PO的版本
For i = 1 To 9 Step 4 '共有12個欄位 但不知為何會是9,不是應該是12嗎

TOP

回復 16# 准提部林
了解!感謝指導∼!!

TOP

        靜思自在 : 忘功不忘過,忘怨不忘恩。
返回列表 上一主題