范围上的 VLookup 聚合函数

范围上的 VLookup 聚合函数

有没有办法使用标准 Excel 函数获取一系列值中的最大值?

更多信息

  • 我想找到单元格范围内的最大值。 答案1: =max(A2:A10)
  • 但是,我不想在单元格本身中找到最大值,而是想通过对这些单元格执行 vlookup 来获取一组相关值。即B2: =vlookup(A2,MyLookupName,2,false)(将 B2 公式复制到 B10)。 答案1: =max(B2:B10)
  • 我宁愿使用一个公式在同一个单元格中一次性应用这两个步骤,而不是分两步执行此操作(即在 B 列中进行 vlookup,然后在单元格 A1 中对其求最大值)。即答案1: {=max(vlookup(A2:A10,MyLookupName,2,false))}

但是,最后一个公式不起作用,因为 VLOOKUP 函数只接受单个单元格作为参数Lookup_Value;如果传递了范围,它会从该范围中取左上角的单元格。

VBA 解决方案

为了更好地说明我所追求的功能,我编写了一个 VBA 工作表函数来执行我所追求的功能;但我试图避免使用自定义宏。

Public Function MaxVLookup(ByRef Lookup_Array As Range, ByRef Table_Array As Range, Col_Index_Num As Long) As Variant
    Dim v As Variant, temp As Variant, max As Variant
    max = Null
    For Each v In Lookup_Array
        temp = WorksheetFunction.VLookup(v, Table_Array, Col_Index_Num, False)
        If IsNull(max) Then
            max = temp
        Else
            If max < temp Then
                max = temp
            End If
        End If
    Next
    MaxVLookup = max
End Function

示例数据

答案1

如果 A 中的值仅出现在参考区域中一次,那么您可以使用包裹在 MAX() 中的 SUMUIF() 作为数组公式:

=MAX(SUMIF(D:D,A1:A10,E:E))

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

在此处输入图片描述


如果它们是多个而您只想要第一个像 VLOOKUP,请使用 LOOKUP():

=MAX(IFERROR(LOOKUP(A1:A10,D1:D13,E1:E13),-1E+99))

这又是一个数组公式。

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

在此处输入图片描述

根据示例的截图

根据示例截图

答案2

注意:我找到了问题的替代解决方案。由于我只需要将每个值映射到一个数字,因此我能够使用 Match 伪造 VLookup。

IE答案1: {=max(6-match(A2:A10,MyLookupName,0))}

6-只是将匹配返回的值(即我在值列表中查找的元素的位置MyLookupName)更改为我要映射到的值。

演示截图

具有价值观的解决方案:

具有价值观的解决方案

公式解决方案:

公式解决方案


注意:我没有将其标记为答案,因为虽然它解决了我的问题,但它并不能解决所有此类问题/绕过了我所提问题的答案。

相关内容