Board logo

標題: [發問] 多條件查詢設定的問題 [打印本頁]

作者: dou10801    時間: 2021-7-19 16:33     標題: 多條件查詢設定的問題

請教各位先進,表單多條件設定,如何設為,[空白條件]為全部,例,[市場]空白=全部.三個條件都空白,表示全部查詢,謝謝.
作者: dou10801    時間: 2021-7-19 16:42

回復 1# dou10801 請教各位先進,表單多條件設定,如何設為,[空白條件]為全部,
原程式:If Cells(i, "A") = Trim(MB1) And Cells(i, "C") = Trim(MB2) And Cells(i, "E") = Val(MB3) Then     '搜尋
例,[市場]空白=表示查全部市場資料,[品種代號]=F1,[等級]=1,會變成:If  Cells(i, "C") = Trim(MB2) And Cells(i, "E") = Val(MB3) Then     '搜尋
例,[市場]空白=,[品種代號]=空白,[等級]=1,會變成:If  Cells(i, "E") = Val(MB3) Then     '搜尋
例,[市場]空白,[品種代號]=F1,[等級]=空白,會變成:If  Cells(i, "C") = Trim(MB2)  Then     '搜尋
三個條件都空白,表示查全部資料,謝謝.
作者: 准提部林    時間: 2021-7-19 18:33

回復 2# dou10801

可改用"排除法"
for i= 1 to 999
If Trim(MB1)<>"" and  Cells(i, "A") <> Trim(MB1) then goto i01
if Trim(MB2)<>"" and  Cells(i, "C") <> Trim(MB2) then goto i01
if Trim(MB3)<>"" and  Cells(i, "E") <> Val(MB3)  Then  goto i01
符合條件..do something...

i01: next i
作者: samwang    時間: 2021-7-19 19:14

回復 1# dou10801

是要這樣嗎? 請測試看看,謝謝
作者: dou10801    時間: 2021-7-19 20:00

本帖最後由 dou10801 於 2021-7-19 20:01 編輯

回復 3# 准提部林 請教准提大師,因剛學vba還體會不出你提供的用法,是否指導能將[排除法]加入範本中讓小弟學習,感恩._
作者: n7822123    時間: 2021-7-19 23:25

本帖最後由 n7822123 於 2021-7-19 23:31 編輯

回復 1# dou10801

反向思考可以用準大的排除法

要正向思考,可以學習用 "Like" 進行模糊比對

支援擴充N種條件


Dim SrhKey$, T$
For i = 1 To 3
  T = Trim(Controls("TextBox" & i).Text)
  SrhKey = SrhKey & "/" & IIf(T = "", "*", T)
Next i
For R = 2 To UBound(MA1)
  Key = "/" & Cells(R, "A") & "/" & Cells(R, "C") & "/" & Cells(R, "E")
  If Key Like SrhKey Then     '搜尋
    '===========
    '-----你的程式-----
    '===========
  End If
Next R

作者: dou10801    時間: 2021-7-20 00:10

一個問題,感謝,准提部林, samwang, n7822123三位前輩相助,而且有三種不同方法,會一一好好學習,感恩感恩.
作者: dou10801    時間: 2021-7-23 12:11

回復 6# n7822123 請教n7822123大大,如果區段日期,要如何設定,感恩.
作者: n7822123    時間: 2021-7-24 00:37

本帖最後由 n7822123 於 2021-7-24 00:52 編輯

回復 8# dou10801


你的I欄並非正常的日期格式,是字串

正常的日期是可以加減運算的,Ex:  A = #7/24/2021#   ,  Msgbox A+1    '2021/7/25

要先轉成日期格式,再比大小就好了



日期自 = Cells(2, "J")
日期止 = Cells(2, "K")
For R = 2 To UBound(MA1) + 1
   T = Cells(R, "I")
   日期Str = Left(T, 7) & "/" & Right(T, 2)
   日期 = CDate(日期Str)   '字串 => 日期
  If 日期 >= 日期自 And 日期 <= 日期止 Then   '搜尋
    '===========
    '-----你的程式-----
    '===========
  End If
Next

作者: dou10801    時間: 2021-7-24 10:02

回復 9# n7822123
感謝指點,日期判斷+link比對,達成我須求感恩,原先以為link可以區間判斷日期,先在懂了,謝謝。
作者: dou10801    時間: 2021-7-25 13:10

回復 3# 准提部林 學習准提部林大師的排除法,增加兩個IF判斷日期區間,也可達成,區期日期+多條件判斷,感恩.
作者: 准提部林    時間: 2021-7-25 15:23

回復 11# dou10801


簡單做一個:
1) 只輸入開始日期:取出>=指定日期資料
2) 只輸入結束日期:取出<=指定日期資料
3) 兩種都有:取出>=及<=區間資料, 注意:兩個日期不可倒錯, 即結束日期不可小于開始日期; 若兩個日期相同=只取同一天資料
4) 兩種都空:不比較日期, 視為日期都符合, 僅比對其它條件

Sub TEST()
Dim Arr, D1, D2, X, i&, j%, N&
Sheets(2).UsedRange.ClearContents
D1 = [j2]: D2 = [k2]: X = [L2:N2]
Arr = Range([i1], [a65536].End(xlUp))
For i = 2 To UBound(Arr)
    If IsDate(D1) Then If CDate(Arr(i, 9)) < D1 Then GoTo i01
    If IsDate(D2) Then If CDate(Arr(i, 9)) > D2 Then GoTo i01
    For j = 1 To 3
        If X(1, j) <> "" And X(1, j) <> Arr(i, Mid(135, j, 1)) Then GoTo i01
    Next j
    N = N + 1
    For j = 1 To UBound(Arr, 2): Arr(N + 1, j) = Arr(i, j): Next
i01: Next i
If N > 0 Then Sheets(2).[a1].Resize(N + 1, UBound(Arr, 2)) = Arr
End Sub


'============================
作者: dou10801    時間: 2021-8-3 17:59

回復 12# 准提部林 請教准提大大,如果是字串如何下條件,[例]客戶編號從A01-A100,我要找A20-A60的資料,要怎麼判斷,感恩.
作者: dou10801    時間: 2021-8-3 18:05

回復 12# 准提部林
作者: 准提部林    時間: 2021-8-3 20:30

回復 14# dou10801

A20~A60

T=arr(i, 1):  V=val(mid(T,2))
if left(T, 1) <> "A" or V < 20 or V > 60 then goto i01
作者: hcm19522    時間: 2021-8-6 17:12

https://blog.xuite.net/hcm19522/twblog/589937981
作者: dou10801    時間: 2021-8-15 12:10

回復 16# hcm19522 感謝hcm19522大大不用VBA也能達成,好好學習.




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