2017-09-23 37 views
1

我想在Excel中完成一個小的VBA項目,目的是讓我比使用內置的過濾器/搜索選項更容易地過濾數據。基本上,我有一個表單,其中包含與數據標題相關的一些用戶輸入。對於要搜索的值,我有一個公差帶的輸入,例如輸入爲:標頭名稱;名義搜索值;公差。然後它會查找在該容差範圍內的所有數據行。VBA找到兩個其他人之間的任何值

下面是我希望循環運行並將每行復制到新工作表的代碼。我想將範圍「fc」設置爲等於在ssMin和ssMax之間找到的第一個單元格。我最好使用If塊嗎?

Private Function searchCells(ifc) 
    Dim ss As Integer 
    Dim fc As Range 
    Dim ssMax As Integer 
    Dim ssMin As Integer 

    ss = lstboxChannelList.List(ifc, 1) 
    ssMax = ss + lstboxChannelList.List(ifc, 2) 
    ssMin = ss - lstboxChannelList.List(ifc, 2) 

    Set fc = Cells.Find(What:=(ssMin <= ssMax), After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False) 
    fc.Select 

    End Function 
+0

你'什麼:=(ssMin <= ssMax)'幾乎可以肯定是相當於'什麼:= TRUE;(假定'ssMin'小於或等於'ssMax'),所以這種方法獲得了沒有工作。是的,使用循環來循環數據並測試每個單獨的單元格以查看它是否符合條件會更好。 (如果它只是一個你正在搜索的列,它**可能只用'Index'和'Match'操作就可以完成,但是,由於你的數據在整個工作表中的任何地方,我不認爲這對你來說是可能的。) – YowE3K

+0

你也可以考慮從用戶表單中獲取輸入,並將其用作Excel簡單或高級過濾器的標準。比循環遍歷所有單元更快,並且仍然可以使用VBA完成以簡化設置標準。使用高級過濾器,您可以使用'CopyTo'參數。使用簡單過濾器,您可以在過濾後複製可見單元格。 –

+0

謝謝,我今天將嘗試這些方法,看看我如何繼續,並希望在解決問題後發佈答案。 –

回答

0

再次感謝您的評論,我今天有一個玩,但無法得到先進的過濾器做我想要的東西。這個小小的陳述讓我很想知道爲什麼我首先爲這個.find煩惱。 「fr」是在前一個函數中選擇的範圍,我不確定是否將它指定爲所選範圍內的整數,但我有點困惑,我如何通過它從函數返回到子然後返回到另一個函數,但是這種方法似乎工作。再次感謝那些評論!

Private Function searchCells(ifc) 
Dim ss As Integer 
Dim fc As Range 
Dim ssMax As Integer 
Dim ssMin As Integer 
Dim cell As Range 
Dim fr As Range 

ss = lstboxChannelList.List(ifc, 1) 
ssMax = ss + lstboxChannelList.List(ifc, 2) 
ssMin = ss - lstboxChannelList.List(ifc, 2) 


Set fr = Selection 
For Each cell In fr 

    If cell.Value < ssMax And cell.Value > ssMin Then 
     cell.Select 
     'More code to come here 
     'MsgBox ("found one!") 

    End If 

Next cell 

End Function 
相關問題