如何在Excel中的两个独立列中匹配与返回相关的单元格字段?

如何在Excel中的两个独立列中匹配与返回相关的单元格字段?,excel,Excel,我试图创建一个公式,显示所有匹配的字段,但另外还包括链接的单元格。类似这样的事情- Brad中的用户类型和结果框应显示Brad、Adam、Charlie、David,因为Brad链接到Adam,Adam链接到Charlie和David A B Adam|Brad Adam|Charlie Adam|David Evan|Fred 公式: {IFERROR(IFERROR(INDEX(Column B,SMALL(IF(Column A=InputCriteria,ROW(Column

我试图创建一个公式,显示所有匹配的字段,但另外还包括链接的单元格。类似这样的事情-

Brad中的用户类型和结果框应显示Brad、Adam、Charlie、David,因为Brad链接到Adam,Adam链接到Charlie和David

A     B
Adam|Brad
Adam|Charlie
Adam|David
Evan|Fred
公式:

{IFERROR(IFERROR(INDEX(Column B,SMALL(IF(Column A=InputCriteria,ROW(Column A)-1),ROW(1:1))),INDEX(Column A,SMALL(IF(Column B=InputCriteria,ROW(Column B)-1),ROW(1:1)))),"")}

我的名字是布拉德,所以我忍不住,我不得不给一个解决方案一个尝试-

将以下代码添加到VBA编辑器中的新模块

Public Function GetAssociatedNames(ByVal strName As String, ByVal rngCells As Range) As String
    Dim lngRow As Long, lngCol As Long, lngBlanks As Long, objNames As Scripting.Dictionary
    Dim strName1 As String, strName2 As String, i As Long, strNameToAdd As String, x As Long
    Dim lngStart As Long, lngCount As Long, lngForCount As Long

    strName = Trim(strName)

    Set objNames = New Scripting.Dictionary
    objNames.Add strName, strName

    With rngCells
        lngStart = 0

        Do While True
            lngForCount = objNames.Count - 1

            If lngStart > lngForCount Then Exit Do

            For x = lngStart To lngForCount
                strName = objNames.Keys(x)

                lngCount = objNames.Count

                For lngRow = 1 To .Rows.Count
                    strName1 = .Cells(lngRow, 1)
                    strName2 = .Cells(lngRow, 2)

                    If strName1 & strName2 = "" Then
                        lngBlanks = lngBlanks + 1
                    Else
                        lngBlanks = 0

                        If strName1 = strName Then strNameToAdd = strName2
                        If strName2 = strName Then strNameToAdd = strName1

                        If Not objNames.Exists(strNameToAdd) And strNameToAdd <> "" Then objNames.Add strNameToAdd, strNameToAdd
                    End If

                    If lngBlanks = 10 Then Exit For
                Next

                lngStart = lngStart + 1
            Next
        Loop
    End With

    For i = 0 To objNames.Count - 1
        GetAssociatedNames = Trim(GetAssociatedNames & "," & objNames.Keys(i))
    Next

    GetAssociatedNames = Replace(Mid(GetAssociatedNames, 2), ",", ", ")
End Function
。。。然后添加对Microsoft脚本运行时的引用

然后你可以在单元格中使用这个公式,就像这样


它对我有效,希望对您有效。

用户是否可以从a列输入值?在这种情况下,亚当,然后你还要匹配B栏中所有的布拉德、查理和戴维斯?我很感激,布拉德先生!我正在寻找更多使用数组的excel公式答案,但这也很有效。再次感谢!我刚刚意识到,只有当搜索从左栏中的字段开始时,它才起作用。如果搜索条件以右列上的字段开头,则不会获取所有匹配项。如果有人能帮忙,那就太好了。如果没有,我将尝试解决并报告。thanks@DavidG让我调查一下。我会再打给你的。@DavidG事实上,我能确认你使用的箱子和清单上的一样吗?也就是说,约翰和约翰是不同的。从我的手机上看,它是区分大小写的。那么你真的得到结果了吗?布拉德,亚当,查理,大卫,弗雷德,埃文?我有布拉德,亚当,埃文