2017-09-23 56 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 
相关问题