EXCEL在不连续范围内匹配元素

我希望能够在不同的工作表中的两列中创build匹配元素的列表。

让我提供一个模拟的例子:我有两个元素列表,在这种情况下,男孩的名字和女孩的名字。 那些将被放置在不同的工作表中。 在下图中,为了简单起见,它们被放置在不同的列(间断范围)中。 我想要公式生成单元格A3:A14列表(列出不连续范围内匹配包含文本“jo”的所有元素。

在这里输入图像说明

我了解到,为公式提供这种不连续范围的最好方法是定义一个命名范围。

到目前为止,我得到的是:

{IF( MATCH( INDEX(Named_Range, SMALL(IF(Named_Range="*"&$A$3&"*", ROW(Named_Range)-ROW(INDEX(Named_Range,1,1))+1),ROW()-1)), '(Names)'!C:C, 0), INDEX(Named_Range, SMALL(IF(Named_Range="*"&$A$3&"*", ROW(Named_Range)-ROW(INDEX(Named_Range,1,1))+1), ROW()-1)), "") } 

Named_Range被声明为=D9:D13,F3:F6

小函数返回匹配条件的第n个元素。 它也应该匹配(Names)中的一个名字!C:C。 如果是这样,我得到那个单元格的价值。 为了简单起见,考虑'(Names)'!C:C包含所有的名字,所以它总会是真的。

这个公式适用于我使用单列作为范围。 但是,如果没有Excel崩溃,我不能使用不连续范围来评估公式,所以我正在寻找关于如何正确使用的一些build议。 谢谢。

也许处理不连续范围的最好方法是使其连续…?

使用小型VBAfunction可以简化您的问题。 这个函数使用一个不连续的命名区域,并返回一个包含所有相同值的连续列。 这样,你可以用正常的方式使用你的INDEX/MATCH/SMALL等公式

 Function Arrange(rng As Range) As Variant Dim temp As Variant Dim i As Long Dim r As Range ReDim temp(1 To rng.Cells.Count) i = 1 For Each r In rng temp(i) = r.Value i = i + 1 Next r Arrange = Application.Transpose(temp) End Function 

将这些代码添加到VBA编辑器中的新模块之后,您将可以在工作表上使用它:

 =INDEX(ARRANGE(Named_Range),1) 

例如,获取第一个元素。