我在尝试创建一个像vlookup一样但返回范围而不是单元格的函数时遇到了一些麻烦
要搜索的数据如下所示
有时候,有时候会有空格分隔 我想要做的是从我的主页面查找16并返回该范围内的所有值。
我目前使用的代码只会返回消息框中的第一行
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
答案 0 :(得分:1)
如果我们可以假设col A中的数字组标签是顺序的,那么我认为这将实现您所需要的:
=MATCH(E1,A:A,0)
为我们提供了第16组的行号
开始,这是我们要复制的第一行。同样的,
=MATCH(E1+1,A:A,0)
为我们提供了第17组开始的行号,
这是我们要复制的最后一行下面的一行。 (不幸
对于最后一组代码而言,情况并非如此,但要纠正这一点
你只需要在数据的最底部添加一个虚拟数字
在col A。)=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
。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)),"")