Board logo

標題: 可以利用VBA進行多條件篩選嗎? [打印本頁]

作者: Jared    時間: 2013-3-28 16:50     標題: 可以利用VBA進行多條件篩選嗎?

想請問大大
雖然Office 2007有內建篩選功能
但如果我想要將篩選功能寫在一個表單裡面
可以一次進行多條件篩選資料嗎?(如圖)
[attach]14473[/attach]

因為目前我只有寫一次輸入單筆資料以性名為搜尋目標
程式運行結果如圖
[attach]14474[/attach]

但如果我想要將搜尋條件為兩筆以上(模糊搜尋)
甚至到完全符合
將篩選結果顯示在原來的表單(未符合條件的資料隱藏(折疊起來))
這樣的寫法就沒辦法了:Q
目前程式寫法如下(順帶附上表單)
[attach]14475[/attach]

希望有大大能解決我的疑惑>"<
  1. Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)

  2. With Sheet2

  3. Set a = .Columns("A").Find(TextBox1.Text, lookat:=xlWhole, LookIn:=xlValues)
  4. If a Is Nothing Then
  5. MsgBox "查無此,請確認後再輸入!"

  6. Exit Sub
  7. End If

  8. ComboBox1.Value = a.Offset(, 1) '年記
  9. ComboBox2.Value = a.Offset(, 2) '身高
  10. ComboBox3.Value = a.Offset(, 3) '體重
  11. TextBox2.Value = a.Offset(, 4) '住址


  12. End With
  13. End Sub
  14. Private Sub CommandButton2_Click()
  15. Me.ComboBox1 = ""
  16. Me.ComboBox2 = ""
  17. Me.ComboBox3 = ""
  18. Me.TextBox1 = ""
  19. Me.TextBox2 = ""
  20. End Sub

  21. Private Sub CommandButton3_Click()
  22. Test5.Hide
  23. End Sub

  24. Private Sub UserForm_Initialize() '一開始的設定
  25. Dim i
  26. For i = 10 To 18
  27.     ComboBox1.AddItem i
  28. Next

  29. For i = 120 To 160
  30.     ComboBox2.AddItem i
  31. Next

  32. For i = 30 To 70
  33.     ComboBox3.AddItem i
  34. Next
  35. End Sub
複製代碼

作者: Jared    時間: 2013-3-29 13:16

回復 1# Jared


發現利用陸製巨集的方式
可以一次篩選一個條件
那如果是要兩個以上
要怎麼設定呢?
  1. Private Sub CommandButton4_Click() '篩選條件
  2. Dim a, b, c, d, e
  3. a = Test5.TextBox1.Text
  4. b = Test5.ComboBox1.Value
  5. c = Test5.ComboBox2.Value
  6. d = Test5.ComboBox3.Value
  7. e = Test5.TextBox2.Text
  8. If a <> "" Then
  9. ActiveSheet.Range("$A$1:$E$12").AutoFilter Field:=1, Criteria1:=a: Exit Sub
  10. End If

  11. If b <> "" Then
  12. ActiveSheet.Range("$A$1:$E$12").AutoFilter Field:=2, Criteria1:=b: Exit Sub
  13. End If

  14. If c <> "" Then
  15. ActiveSheet.Range("$A$1:$E$12").AutoFilter Field:=3, Criteria1:=c: Exit Sub
  16. End If

  17. If d <> "" Then
  18. ActiveSheet.Range("$A$1:$E$12").AutoFilter Field:=4, Criteria1:=d: Exit Sub
  19. End If

  20. If e <> "" Then
  21. ActiveSheet.Range("$A$1:$E$12").AutoFilter Field:=5, Criteria1:=e: Exit Sub
  22. End If
  23. End Sub
複製代碼

作者: GBKEE    時間: 2013-3-29 13:45

回復 2# Jared
  1. Option Explicit
  2. Private Sub CommandButton4_Click() '篩選條件
  3. Dim a, b, c, d, e
  4. a = Test5.TextBox1.Text
  5. b = Test5.ComboBox1.Value
  6. c = Test5.ComboBox2.Value
  7. d = Test5.ComboBox3.Value
  8. e = Test5.TextBox2.Text
  9. With ActiveSheet.Range("$A$1:$E$12")
  10.     .Parent.AutoFilterMode = False   '顯示全部資料 ->新的 多重篩選 才會確.
  11.     '多重篩選  ..........
  12.     If a <> "" Then .AutoFilter Field:=1, Criteria1:=a
  13.     If b <> "" Then .AutoFilter Field:=2, Criteria1:=b
  14.     If c <> "" Then .AutoFilter Field:=3, Criteria1:=c
  15.     If d <> "" Then .AutoFilter Field:=4, Criteria1:=d
  16.     If e <> "" Then .AutoFilter Field:=5, Criteria1:=e
  17.     '多重篩選  ..........
  18. End With
  19. End Sub
複製代碼

作者: Jared    時間: 2013-3-29 14:03

回復 3# GBKEE


感謝大大解除了我的疑惑
原本的程式碼是寫成獨立式
  1. If a <> "" Then
  2. ActiveSheet.Range("$A$1:$E$12").AutoFilter Field:=1, Criteria1:=a: Exit Sub
  3. End If
複製代碼
後來有修改成
  1. Private Sub CommandButton4_Click()
  2. Dim a, b, c, d, e
  3. a = Test5.TextBox1.Text
  4. b = Test5.ComboBox1.Value
  5. c = Test5.ComboBox2.Value
  6. d = Test5.ComboBox3.Value
  7. e = Test5.TextBox2.Text

  8. If a <> "" Or b <> "" Or c <> "" Or d <> "" Or e <> "" Then
  9. With Sheet2.Range("$A$1:$E$12")
  10. .AutoFilter Field:=1, Criteria1:=a
  11. .AutoFilter Field:=2, Criteria1:=b
  12. .AutoFilter Field:=3, Criteria1:=c
  13. .AutoFilter Field:=4, Criteria1:=d
  14. .AutoFilter Field:=5, Criteria1:=e

  15. End With
  16. End If
  17. End Sub
複製代碼
但卻變成要每個條件都符合才會篩選出東西>"<
看了大大的解答
原來是要分開進行

看來我又學到一課了^口^
非常感謝!!
作者: jeffrey628litw    時間: 2013-3-30 14:29

2位大大,小弟剛在學習VBA,可以將您們討論的結果,檔案上傳供我們下載嗎?感恩
作者: Jared    時間: 2014-7-18 14:59

回復 5# jeffrey628litw


你可以把樓頂問題的測試檔下載下來
在把程式碼替換掉就可以了
介面上應該是沒什麼改到
只有在程式碼的部分
作者: bsofsoratest    時間: 2016-3-27 14:36

謝謝分享。
作者: Qektyyrwp    時間: 2016-3-29 20:02

回復 4# Jared


   a = Test5.TextBox1.Text
b = Test5.ComboBox1.Value
c = Test5.ComboBox2.Value
d = Test5.ComboBox3.Value。大大請問test5。這個地方是怎麼設計的。小弟權限不足不能下載來看。抱歉
作者: Qektyyrwp    時間: 2016-3-30 02:12

回復 3# GBKEE


    發現這是幾年前的帖子了。換問問版主。
a = Test5.TextBox1.Text
b = Test5.ComboBox1.Value
c = Test5.ComboBox2.Value
d = Test5.ComboBox3.Value。大大請問test5。這個地方是怎麼設計的。小弟權限不足不能下載來看。抱歉
作者: Michelle-W    時間: 2017-7-20 09:03

本帖最後由 Michelle-W 於 2017-7-20 09:13 編輯

回復 3# GBKEE

版主大大您好,
我的多條件篩選功能總是失敗...可否協助幫忙看看哪邊錯了
而且應該如何將篩選完的資料貼到介面上(依據不同欄的名稱)
先謝謝您了!
[attach]27501[/attach]
作者: Michelle-W    時間: 2017-7-20 09:22

本帖最後由 Michelle-W 於 2017-7-20 09:23 編輯

回復 3# GBKEE


不好意思..這個才是正確檔案(上個回覆已超過時間,無法編輯...
麻煩了,謝謝
[attach]27503[/attach]
作者: GBKEE    時間: 2017-7-20 20:35

回復 11# Michelle-W
試試看


[attach]27505[/attach]
作者: Michelle-W    時間: 2017-7-21 10:10

回復 12# GBKEE


  謝謝版主大大的指點
  另外有個問題想請教您,若是剛好有空格的話,空格以下的文字並不會顯示於ListBox
  請問應該如何調整code呀?
[attach]27518[/attach]
作者: Michelle-W    時間: 2017-7-21 11:14

回復 12# GBKEE


   版主您好   
   資料方面A欄肯定一定有資料,BCD欄就不一定了
   想說迴圈可以加一個條件   B欄<>""&A欄<>""
   我嘗試修改,還是改不出來...
   若您有空,可以再麻煩您指點一下嗎? 謝謝
作者: GBKEE    時間: 2017-7-21 15:46

本帖最後由 GBKEE 於 2017-7-21 15:48 編輯

回復 14# Michelle-W
[想說迴圈可以加一個條件   B欄<>""&A欄<>""] 好像沒有必要吧

[若是剛好有空格的話,空格以下的文字並不會顯示於ListBox] 已修改了,篩選 空格 需用 "="

[attach]27519[/attach]
作者: Michelle-W    時間: 2017-7-21 17:19

回復 15# GBKEE


真的很感謝版主,還修改成能選填時能即時顯示
但目前我的資料量比較多,會稍微卡卡的...(
還是想說選擇什麼,再執行會好一點
如果以昨晚您回復的UserForm_Initialize寫法,也是可以加"="來做Listbox的讀取嗎?(能讀取空格以後的)
作者: GBKEE    時間: 2017-7-24 08:55

本帖最後由 GBKEE 於 2017-7-24 09:01 編輯

回復 16# Michelle-W
試試看

[attach]27542[/attach]
  1. Do
  2.             If .Cells(R, i) <> "" Then  'i 為欄的位置
  3.                 d(.Cells(R, i).Value) = ""
  4.             Else
  5.                 d("=") = ""
  6.             End If
  7.             R = R + 1
  8.         Loop Until .Cells(R - 1, i).End(xlDown).Row = Rows.Count
複製代碼

作者: Michelle-W    時間: 2017-7-24 18:02

回復 17# GBKEE

謝謝版主大大一直指導
我比較少接觸這類程式碼,需要花點時間消化
非常感謝^^




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)