返回列表 上一主題 發帖

[發問] 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 (47.32 KB)

圖一

圖一.PNG

圖一完成.PNG (34.61 KB)

圖一完成

圖一完成.PNG

圖二.PNG (61.19 KB)

圖二

圖二.PNG

圖二完成.PNG (50.79 KB)

圖二完成

圖二完成.PNG

圖三.PNG (46.5 KB)

圖三

圖三.PNG

圖三完成.PNG (36.98 KB)

圖三完成

圖三完成.PNG

*宅女一枚無誤*

回復 12# GBKEE


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

TOP

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

回復 11# msmplay


  
  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

        靜思自在 : 【為善競爭】人生要為善競爭,分秒必爭。
返回列表 上一主題