Arrays 基于多个条件返回相邻单元格内容的数组公式

Arrays 基于多个条件返回相邻单元格内容的数组公式,arrays,excel,excel-formula,Arrays,Excel,Excel Formula,我需要一个公式,首先根据与表上的列标题匹配的指定单元格的内容,确定要搜索表中的哪一列。因此,假设带有所需单词的单元格位于表1的单元格A1中,包含单词Task。公式需要搜索选项卡2第1行中的列标题,以找到包含标题任务的列 然后,它需要向下搜索该列,以找到将出现多次的单词mandatory,并返回B列中相邻单元格的内容 我已在以下网站上查看了阵列公式: 下面的公式让我有一部分的方法,但它不满足我的初始要求,因为它是固定的,正在搜索我的搜索项列A {INDEX($B$1:$B$5,SMALL(IF(

我需要一个公式,首先根据与表上的列标题匹配的指定单元格的内容,确定要搜索表中的哪一列。因此,假设带有所需单词的单元格位于表1的单元格A1中,包含单词Task。公式需要搜索选项卡2第1行中的列标题,以找到包含标题任务的列

然后,它需要向下搜索该列,以找到将出现多次的单词mandatory,并返回B列中相邻单元格的内容

我已在以下网站上查看了阵列公式:

下面的公式让我有一部分的方法,但它不满足我的初始要求,因为它是固定的,正在搜索我的搜索项列A

{INDEX($B$1:$B$5,SMALL(IF(ISNUMBER(SEARCH($E$1,$A$1:$A$5)),MATCH(ROW($A$1:$A$5),ROW($A$1:$A$5))),ROW(A1)))}
我也复习了这一页。巴里的指数公式似乎是我所追求的,但我很难将这两个公式整合在一起


任何帮助都将不胜感激

我不能百分之百肯定,仅仅用一个数组公式就可以做你想做的事情。尽管如此,还是有人闹鬼,他们比我更擅长数组公式

如果您不介意使用自定义项路径,可以通过将其粘贴到工作簿中的新模块中来使用此自定义项:

Function getList(headerValue As String, rowValue As String, lookupRange As Range, returnOffset As Integer) As String
    Dim lookupCol As Range, lookupCell As Range
    Dim getListOut As String

    'find the column to lookup into
    For Each lookupCol In lookupRange.Columns
        If lookupCol.Cells(1, 1).Value = headerValue Then Exit For
    Next lookupCol

    'search each cell in the column (for the lookupRange) for matchValue
    For Each lookupCell In Intersect(lookupCol, lookupRange).Cells

        'See if we have a match
        If lookupCell.Value = rowValue Then

            'Concatenate if necessary to the output
            If getListOut = "" Then
                getListOut = lookupCell.Offset(, returnOffset).Value
            Else
                getListOut = getListOut & "," & lookupCell.Offset(, returnOffset).Value
            End If
        End If
    Next lookupCell

    'return
    getList = getListOut
End Function
并在您的单元格中使用它(如第一个选项卡“sheet1”上的B1):

此处
A1
是要搜索的标题值,
“必填”
是要在该标题的列中找到的单元格值,
Sheet2!A1:G6
是要搜索的表,
-4
是从我们在其中找到的带“必填”的行中获取值的列偏移量

我将“任务”一词放在A1和表2的标题(F列)中。我在三行中添加了单词“mandatory”,在B列中,我为每个
mandatory
添加了“d”、“e”和“f”。这返回了预期的
d、e、f


这有点像vlookup中的hlookup,它在逗号分隔的列表中返回多个点击,也允许负偏移量

表1
B1
中:

=COUNTIF(索引(Sheet2!$1:$1048576,匹配(A$1,Sheet2!$1:$1,0)),“必填”)

Sheet1
C1
中,数组公式**

=IF(ROWS($1:1)>B$1,”,索引(Sheet2!B:B,SMALL(IF(INDEX(Sheet2!sheet1:$100,MATCH(A$1,Sheet2!Sheet2:$1:1,0))=“必填”,ROW(Sheet2!A$2:A$100)-分钟(ROW(Sheet2!A$2:A$100))+1),ROWS($1:1))

C1
中的公式向下复制(虽然不是
B1
中的公式,它只是用来计算预期的返回次数),直到结果开始变为空白

请参阅,以了解为什么在此类构造中最好参考附加计数单元(
B1
),而不是求助于
IFERROR

编辑:此处的关键结构是:

索引(Sheet2!$1:$100,匹配(A$1,Sheet2!$1:$1,0))

它利用了这样一个事实,即如果传递给
索引
的行或列参数中的一个(或两者)为零(或等效地省略),并且
索引
被正确强制(例如,形成较大公式的一部分),则生成对整个指定列或行的引用

因此,假设
A1
中的值出现在
Sheet2
列D
中,则上述将解析为:

索引(Sheet2!$1:$100,4)

那是

Sheet2$D1:$D100

有关
索引的此属性的详细信息,请参阅

问候


**数组公式的输入方式与“标准”公式不同。不要只按ENTER键,而是先按住CTRL和SHIFT键,然后再按ENTER键。如果你做得正确,你会注意到Excel在公式周围放了一个大括号{}(尽管你自己不要尝试手动插入这些括号)。

因此,如果你的列中有多个单词
必填项
,你想返回每个命中项的相邻单元格吗?就像在逗号分隔的列表中一样?可能是对我旁边的单词使用不当。如果标记为task的列是F列,并且在单元格F2、F5等中找到了必填项,那么我想返回单元格B2、B5等的值。嗨,我喜欢这个解决方案。你介意为我的学习提供一点关于函数机制的解释吗?
=getList(A1,"mandatory", Sheet2!A1:G6, -3)