索引匹配-返回多个值

时间:2018-08-03 18:28:48

标签: excel indexing matching

我刚进入Excel 2016,因为我刚刚下载了Excel 2016,现在我迷失了方向。

对于上下文,我将公式添加到单元格Q3中并将其向下拖动。工作表2从A1-N25435开始运行

我正在尝试查找ID号(第1页,B列),并返回与该候选ID相关的请购单(第2页,D列)(第2页,C列)。我遇到了问题,因为可能有多达20个与特定ID相关联的请购单,而且我似乎无法获得任何要返回的数据。

理想情况下,此信息是水平返回的。

如果有人可以提供帮助,我将不胜感激。

edit:我尝试了该匹配公式,但仅返回其中一些结果。我希望返回所有值。 = MATCH(B3,'Sheet2'!$ C $ 1:$ C $ 25435,0)

然后我尝试: = IF(ISERROR(INDEX($ A $ 1:$ N $ 25435,SMALL(IF('[[Sheet2] Candidate ID'!! $ A $ 1:$ N $ 25435 = $ Q $ 3,ROW($ A $ 1:$ N $ 25435)) ),ROW(1:1)),2)),“”,INDEX([Sheet2A $ 1:$ N $ 25435,SMALL(IF($ A $ 1:$ N $ 25435 = $ D $ 1,ROW($ A $ 1:$ N $ 25345)),ROW(1:1)),2))没有任何结果。

2 个答案:

答案 0 :(得分:0)

在第3季度尝试此操作并填写,直到用完要退回的请购单,

=iferror(index('sheet2'!d:d, aggregate(15, 7, row($1:$25435)/('sheet2'!c$1:c$25435=b$3), row(1:1))), text(,))

答案 1 :(得分:0)

我强烈推荐[excelisfun]的youtube视频。他有很棒的教程和示例工作可供学习。他涵盖了从最基础到最高级的所有内容,并向您展示了如何逻辑地完成各个部分。

虽然我意识到这并不是您真正要寻找的东西,但这个问题已经出现了好几次,直到我厌倦了尝试做数组公式而又不愿做很多工作。我编写了3个函数,它们在单元格的每一行上运行countif,index和match之前,在定界符上拆分该单元格。当只有一个条目时,它也适用。

要使用这些功能,请将其添加到个人工作簿中,然后将在“功能-用户定义的功能”区域中提供它们,并允许您使用向导来完成输入。

创建个人工作簿:Robust Instructions
Slimline:要进入个人工作簿,请使用excel左下角的小记录宏按钮,进行类似输入框的操作,然后按Enter,然后停止记录宏。它将询问您将其保存在何处并选择个人工作簿。如果尚不存在,则应为您创建它。然后,您可以编辑刚创建的宏,并将函数粘贴到刚创建的宏的顶部。

注意:在match函数中,我假定一个完全匹配的matchtype,因为这是我做过的所有事情。如果还需要传递第4个参数,则相当容易。

    Public Function StackCountIf(lookup_value, lookup_array, delimiter)
        If (Len(lookup_value) - Len(Replace(lookup_value, delimiter, "")) = 0) Then
            StackCount = WorksheetFunction.CountIf(lookup_array, lookup_value)
        Else
            arrLookup = Split(lookup_value, delimiter)
            For Each thisLookup In arrLookup
                thisReturn = thisReturn + WorksheetFunction.CountIf(lookup_array, thisLookup)
            Next thisLookup
            StackCount = thisReturn
        End If
    End Function

    Public Function StackMatch(lookup_value, lookup_array, delimiter)
        If (Len(lookup_value) - Len(Replace(lookup_value, delimiter, "")) = 0) Then
            StackMatch = WorksheetFunction.Match(lookup_value, lookup_array, 0)
        Else
            arrLookup = Split(lookup_value, delimiter)
            For Each thisLookup In arrLookup
                thisReturn = thisReturn & WorksheetFunction.Match(thisLookup, lookup_array, 0) & delimiter
            Next thisLookup
            thisReturn = Left(thisReturn, (Len(thisReturn) - Len(delimiter)))
            StackMatch = thisReturn
        End If
    End Function

    Public Function StackIndex(lookup_array, row_num, delimiter)
        If (Len(row_num) - Len(Replace(row_num, delimiter, "")) = 0) Then
            StackIndex = WorksheetFunction.Index(lookup_array, row_num)
        Else
            arrRownums = Split(row_num, delimiter)
            For Each thisRownum In arrRownums
                thisReturn = thisReturn & WorksheetFunction.Index(lookup_array, thisRownum) & delimiter
            Next thisRownum
            thisReturn = Left(thisReturn, (Len(thisReturn) - Len(delimiter)))
            StackIndex = thisReturn
        End If
    End Function