比较两个列表,对于每个匹配项,返回相邻列的值

比较两个列表,对于每个匹配项,返回相邻列的值

清单A表格中包含魔法物品及其一些属性。清单B包含单个单元格中的角色库存。我试图创建一个公式,该公式返回列表 A 中 D 列的值,该值对应于列表 B 中存在的每个项目,输出结果为单个值。在此特定情况下,所需的输出将是“力量伤害、酸伤害”或类似值。

为了实现这一点,我将列表 B 变成了一列,每行都有单独的值,而不是一个单元格,如您所见这里。这样我就可以通过 VLOOKUP 查找我需要的信息。然而,这是一种非常混乱的方法,因为我必须手动确定要检查的最大项目数,而且由于值不可用和 0 值,我无法以干净的方式编译这些信息。

我发现的唯一类似问题是这个问题,但由于缺乏示例数据,尚未得到解答。

答案1

您可以尝试这样的 UDF:

Option Explicit
Option Compare Text

Function Magistry(Itemlist As Range, Inventory As Range, Attributes As Range)

On Error GoTo Catcher
Dim MyList As Variant, Powers As String, c As Variant, i As Long, n As Long

MyList = Split(Inventory, Chr(10))
n = 1
For Each c In Itemlist
    For i = LBound(MyList) To UBound(MyList)
        If MyList(i) = c And Attributes(c.Row, 1) <> vbNullString Then
            If n = 1 Then
                Powers = Attributes(c.Row, 1)
                n = 0
                Else
                Powers = Powers + ", " & Attributes(c.Row, 1)
            End If
        End If
    Next i
Next c

Magistry = Powers
Exit Function
Catcher:
Magistry = "You Lose"
End Function

使用 ALTF11 进入开发人员窗口,插入一个模块然后复制并粘贴此函数。返回 excel 并用作公式:

=magistry(ItemList, Inventory, Attributes)

Magistry 示例

相关内容