返回列表 上一主題 發帖

[發問] VBA依條件自動篩選

[發問] VBA依條件自動篩選

本帖最後由 msmplay 於 2016-12-14 20:11 編輯

想請教網大高手們~~~~~~~

請問如何使用VBA達到以下自動篩選功能:
1.按下「逾期數TOP 5」按鈕時,CZ欄可自動篩選出逾期數前5名。例如圖一
2.按下「完成率低於90%」按鈕時,DA欄可自動篩選出完成率低於90%以下。例如圖二
3.按下「作業天數TOP 5」按鈕時,DB欄可自動篩選出作業天數前5名。例如圖三

說明:
1. 第223列工作數總計不列入篩選條件範圍內
2. 第1與第3條件,如果同時有2個以上均有第5名的相同數據時,則均需篩選出來
3. 因為數據會不斷更新,所以以上三個條件數據均可能不同,故無法使用目前的固定數據錄製成巨集



管理總表.rar (60.22 KB)

圖一

圖一.PNG

圖一完成

圖一完成.PNG

圖二

圖二.PNG

圖二完成

圖二完成.PNG

圖三

圖三.PNG

圖三完成

圖三完成.PNG
*宅女一枚無誤*

回復 12# GBKEE


   謝謝G大熱心幫忙ㄟ~~~~~~~~~~
*宅女一枚無誤*

TOP

本帖最後由 GBKEE 於 2016-12-18 08:11 編輯

回復 11# msmplay


  
未命名.JPG
2016-12-18 08:09
  1. Option Explicit
  2. Sub Ex_作業天數()
  3.     Ex_篩選 "作業天數", 10, 3   'xlTop10Items=3 請看圖示  
  4. End Sub
  5. Sub Ex_完成率()
  6.     Ex_篩選 "完成率", "<0.9", 0
  7. End Sub
  8. Sub Ex_逾期數()
  9.     Ex_篩選 "逾期數", 10, 3
  10. End Sub
  11. Sub Ex_篩選(篩選 As String, 篩選準則 As String, xl_Operator As Integer)
  12.     Dim Rng As Range
  13.     With Sheets("工作完成率統計")
  14.         Set Rng = .Rows("1:3").Find(篩選, lookat:=xlWhole)
  15.         If Rng Is Nothing Then MsgBox "找不到  " & 篩選: Exit Sub
  16.         Set Rng = Range(Rng.Range("A3"), Rng.Range("A4").End(xlDown).Offset(-1))
  17.         If .FilterMode Or .AutoFilterMode Then .AutoFilterMode = False   ' 取消 [自動篩選]
  18.         If xl_Operator > 0 Then
  19.             Rng.AutoFilter Field:=1, Criteria1:=篩選準則, Operator:=xl_Operator ', VisibleDropDown:=False
  20.         Else
  21.             Rng.AutoFilter Field:=1, Criteria1:=篩選準則 ', VisibleDropDown:=False
  22.         End If
  23.         '**  VisibleDropDown:=False :不在工作表上顯示有 [自動篩選] 下拉箭號
  24.         Rng(1).Select
  25.     End With
  26. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 10# 准提部林


   謝謝准大~~~~~~~~~~~~~~~~
*宅女一枚無誤*

TOP

  1. Dim FilArea As Range

  2. Sub 逾期數()
  3. Dim R&, xClmn As Range, i&, LG, GG, N%
  4. Call 取消篩選
  5. Set xClmn = FilArea.Columns(103)
  6. R = Application.CountIf(xClmn, ">0")
  7. If R = 0 Then Exit Sub
  8. Sheets("工作完成率統計").AutoFilterMode = False
  9. For i = 1 To R
  10.     LG = Application.Large(xClmn, i)
  11.     If GG <> LG Then N = N + 1: GG = LG
  12.     If N = 5 Then Exit For
  13. Next
  14. FilArea.AutoFilter Field:=103, Criteria1:=">=" & GG
  15. End Sub

  16. Sub 低於90()
  17. Call 取消篩選
  18. Sheets("工作完成率統計").AutoFilterMode = False
  19. FilArea.AutoFilter Field:=104, Criteria1:="<90%"
  20. End Sub

  21. Sub 作業天數()
  22. Dim R&, xClmn As Range, i&, LG, GG, N%
  23. Call 取消篩選
  24. Set xClmn = FilArea.Columns(105)
  25. R = Application.Count(xClmn)
  26. If R = 0 Then Exit Sub
  27. Sheets("工作完成率統計").AutoFilterMode = False
  28. For i = 1 To R
  29.     LG = Application.Large(xClmn, i)
  30.     If GG <> LG Then N = N + 1: GG = LG
  31.     If N = 5 Then Exit For
  32. Next
  33. FilArea.AutoFilter Field:=105, Criteria1:=">=" & GG
  34. End Sub

  35. Sub 取消篩選()
  36. Dim R&
  37. With Sheets("工作完成率統計")
  38.      .AutoFilterMode = False
  39.      R = .UsedRange.Rows.Count - 1
  40.      If R <= 4 Then Exit Sub
  41.      Set FilArea = .Range("B3:DB" & R)
  42.      FilArea.AutoFilter
  43. End With
  44. End Sub
複製代碼
[attach]26115[/attach]

管理總表_V1.rar (60.33 KB)

TOP

回復 6# GBKEE

原來如此丫!!謝謝你ㄛG大~~~~~
*宅女一枚無誤*

TOP

回復 7# 准提部林

准大沒錯沒錯!!!
*宅女一枚無誤*

TOP

假如第1名有2個, 第2名有3個, 前5大, 應是8個???

TOP

回復 5# msmplay
193列時際上是9.5,因你格式上採用數值小數點0位,所以顯示為10
可修改公式=IF(SUM(G193:CX193)=0,"-",ROUND(AVERAGE(G193:CX193),0))
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 msmplay 於 2016-12-17 00:40 編輯

回復 4# GBKEE

   原來如此丫~~~~~真是太感謝您了G大!!不過可以再請教一下~~~~就是小妹自己改好之後如附件,但遇到以下問題
1.逾期數會顯示223列總計,完成率、作業天數是否也可以同樣篩選後固定顯示223列總計呢?
2.作業天數篩選後發現同樣TOP10的數字10共有3個,但因為顯示為TOP10,所以並列為第10大的數字10只顯示了2個,列193反而沒辮法顯示(已反紅),請問這是否有其他解決方法呢?


非常感謝~~~~~~~
管理總表.rar (62.15 KB)
*宅女一枚無誤*

TOP

        靜思自在 : 閒人無樂趣,忙人無是非。
返回列表 上一主題