我正在尝试创建一个公式,显示所有匹配的字段,但还包括“链接的单元格”。像这样的东西——
用户输入“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 Scripting Runtime的引用...
然后您可以在单元格中使用公式,就像这样......
它对我有用,希望它对你有用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句