gpt4 book ai didi

excel - Vlookup 使用 2 列引用另一列

转载 作者:行者123 更新时间:2023-12-02 03:29:23 29 4
gpt4 key购买 nike

我正在尝试在先姓后名的情况下进行 vlookup 来获取年龄。这将在 A 列中完成,然后在 B 列中完成。如果在 A 列中找到,则继续到 B 列,如果在 B 列中找到,则将来自 C 列的年龄放入 J3 中,否则放入“无”。

这是一个例子:

J1 = John
J2 = Doe
J3 = =VLOOKUP J1 & J2,A1:C50,3,FALSE)

J3是我目前所拥有的。我是否需要嵌套 Vlookup 来检查 A 列,然后检查 B 列才能获取年龄?

以下是表格列表的示例:

A     B    C
Jeff Vel 80
John Fly 25
Jake Foo 20
John Doe 55

J3 = 55。

最佳答案

多种方式:

如果有新的动态数组公式:

=FILTER(C:C,(A:A=J1)*(B:B=J2))

enter image description here

如果没有,那么:

  1. 处理数字返回:

如果您的返回值是数字并且匹配是唯一的(数据中只有一个 John Doe),或者您想要对多个返回值求和,那么使用 SUMIFS 是最快的方法。

=SUMIFS(C:C,A:A,J1,B:B,J2)

enter image description here

<小时/>
  • 返回非数字
  • 如果返回的不是数字或者有多个,那么有两种方法可以获取列表中的第一个匹配项:

    a.辅助列:

    在第四列中输入以下公式:

    =A1&B1

    并复制列表

    enter image description here

    然后使用索引/匹配:

    =INDEX(C:C,MATCH(J1&J2,D:D,0))

    enter image description here

    b.数组公式:

    如果您不想或无法创建第四列,则使用数组类型公式:

    =INDEX(C:C,AGGREGATE(15,6,ROW($A$1:$A$4)/(($A$1:$A$4=J1)*($B$1:$B$4=J2)),1))

    数组类型公式需要限制数据集的数据大小。

    enter image description here

    如果您的数据集大小定期更改,我们可以通过添加更多 INDEX/MATCH 以返回最后一个包含数据的单元格来将上述内容修改为动态:

    =INDEX(C:C,AGGREGATE(15,6,ROW($A$1:INDEX($A:$A,MATCH("ZZZ",A:A)))/(($A$1:INDEX($A:$A,MATCH("ZZZ",A:A))=J1)*($B$1:INDEX($B:$B,MATCH("ZZZ",A:A))=J2)),1))

    这将允许数据集增大或缩小,并且公式将仅迭代那些具有数据的数据集,而不是整个列。

    上述方法按照Best-Better-Good的顺序设置。

    <小时/>
  • 在一个单元格中获取多个答案
  • 如果您不想求和,或者返回值是文本,并且存在多个 John Doe 实例,并且您希望所有值都返回到一个单元格中,则:

    a.如果您有 Office 365 Excel,则可以使用 TEXTJOIN 的数组形式:

    =TEXTJOIN(",",TRUE,IF(($A$1:$A$4=J1)*($B$1:$B$4=J2),$C$1:$C$4,""))

    作为数组公式,退出编辑模式时需要使用 Ctrl-Shift-Enter 确认,而不是 Enter。如果操作正确,Excel 会将 {} 放在公式周围。

    与上面的 AGGREGATE 公式一样,它需要仅限于数据集。也可以使用上面的 INDEX/MATCH 函数使范围动态化。

    enter image description here

    b.如果没有 Office 365 Excel,请将此代码添加到附加到工作簿的模块中:

    Function TEXTJOIN(delim As String, skipblank As Boolean, arr)
    Dim d As Long
    Dim c As Long
    Dim arr2()
    Dim t As Long, y As Long
    t = -1
    y = -1
    If TypeName(arr) = "Range" Then
    arr2 = arr.Value
    Else
    arr2 = arr
    End If
    On Error Resume Next
    t = UBound(arr2, 2)
    y = UBound(arr2, 1)
    On Error GoTo 0

    If t >= 0 And y >= 0 Then
    For c = LBound(arr2, 1) To UBound(arr2, 1)
    For d = LBound(arr2, 1) To UBound(arr2, 2)
    If arr2(c, d) <> "" Or Not skipblank Then
    TEXTJOIN = TEXTJOIN & arr2(c, d) & delim
    End If
    Next d
    Next c
    Else
    For c = LBound(arr2) To UBound(arr2)
    If arr2(c) <> "" Or Not skipblank Then
    TEXTJOIN = TEXTJOIN & arr2(c) & delim
    End If
    Next c
    End If
    TEXTJOIN = Left(TEXTJOIN, Len(TEXTJOIN) - Len(delim))
    End Function

    然后使用如上所述的 TEXTJOIN() 公式。

    关于excel - Vlookup 使用 2 列引用另一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42492758/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com