找到结果然后范围和复制

时间:2013-12-22 18:19:13

标签: excel function excel-vba lookup vba

我在尝试创建一个像vlookup一样但返回范围而不是单元格的函数时遇到了一些麻烦

要搜索的数据如下所示

lookup

有时候,有时候会有空格分隔 我想要做的是从我的主页面查找16并返回该范围内的所有值。

main

我目前使用的代码只会返回消息框中的第一行

Public Function findrulepos(target) As Range    
    Dim ruleStart, ruleEnd, ruleEnd2 As String       
    Dim RuleRange As Range
    'Dim ruleEnd As Range

    MaxRule = 100000
    MaxRow = 100000

    Set target = Sheets("main").Range("E2")

    Sheets("ResRules").Select

    For i = 3 To MaxRow
        If CStr(ThisWorkbook.Sheets("ResRules").Range("A" & i).Value) = _
        CStr(target.Value) Then
            ruleStart = _
            ThisWorkbook.Sheets("ResRules").Range("A" & i).Offset(0, 1).Text

            Exit For
         Else
         End If
    Next i
End Function

1 个答案:

答案 0 :(得分:1)

如果我们可以假设col A中的数字组标签是顺序的,那么我认为这将实现您所需要的:

  1. 输入您要提取的数字标签(在您的示例中为16)到单元格E1
  2. 请注意,=MATCH(E1,A:A,0)为我们提供了第16组的行号 开始,这是我们要复制的第一行。同样的, =MATCH(E1+1,A:A,0)为我们提供了第17组开始的行号, 这是我们要复制的最后一行下面的一行。 (不幸 对于最后一组代码而言,情况并非如此,但要纠正这一点 你只需要在数据的最底部添加一个虚拟数字 在col A。)
  3. 在F1中输入公式=IF(ROW()+MATCH(E$1,A:A,0)-1<MATCH(E$1+1,A:A,0),INDIRECT("B"&MATCH(E$1,A:A,0)+ROW()-1),"")。这应该复制所选代码块的第一个值 - 示例中的[DO] ADD TO QUEUE P
  4. 将F1复制为最大代码块可能的行数。
  5. 这样做的一个问题是,只要复制空行,它就会放置0。所以你必须明确检查这种情况,例如通过将F1中的公式更改为=IF(ROW()+MATCH(E$1,A:A,0)-1<MATCH(E$1+1,A:A,0),IF(ISBLANK(INDIRECT("B"&MATCH(E$1,A:A,0)+ROW()-1)),"",INDIRECT("B"&MATCH(E$1,A:A,0)+ROW()-1)),"")