我希望能够从不同工作表中的两列创建匹配元素列表。
让我提供一个模拟示例: 我有两个元素列表,在这个例子中是男孩名字和女孩名字。这些将被放在不同的床单。在下图中,为简单起见,它们被放置在不同的列中(不连续范围)。我希望公式在单元格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
small函数返回与条件匹配的第n个元素。它也应该匹配(名字)中的一个名字!C:C。如果是这样,我得到那个单元格的值。为简单起见,请考虑'(名称)'!C:C包含所有名称,因此它始终为真。
这个公式适用于我使用单列作为范围。但是,我无法在没有Excel崩溃的情况下使用不连续范围来评估公式,因此我正在寻找关于如何正确使用它的建议。 感谢。
答案 0 :(得分:1)
或许处理不连续范围的最佳方法是让它连续......?
使用小型VBA功能可以简化您的问题。此函数采用不连续的命名范围,并返回包含所有相同值的单个连续列。这样您就可以正常方式使用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)
例如,获取第一个元素。