返回最高值字段的名称

返回最高值字段的名称

我有多个产品并且对它们有自己的价值。

我以前min()总是先找到最小值,然后使用 来Index获取match相应的产品名称。但我有多个具有相同值的产品。

在这种情况下,最小值为54,那么我如何获取与其映射的所有三个名称,例如它应该显示产品 A产品 P产品 Q反对 54。

在此处输入图片描述

目前仅显示产品 P

答案1

使用如下数据:

在此处输入图片描述

在标准模块中输入以下用户定义函数:

Public Function FindAll(v As Variant, rng As Range) As String
    Dim i As Long
    ary = rng

    For i = LBound(ary, 1) To UBound(ary, 1)
        If v = ary(i, 1) Then FindAll = FindAll & "," & ary(i, 2)
    Next i
    FindAll = Mid(FindAll, 2)
End Function

选择一个单元格,比如说D7,然后输入:

 =MIN(A:A)

以及C7进入:

=findall(D7,A1:B25)

在此处输入图片描述

用户定义函数 (UDF) 非常容易安装和使用:

  1. ALT-F11 打开 VBE 窗口
  2. ALT-I ALT-M 打开新模块
  3. 粘贴内容并关闭 VBE 窗口

如果您保存工作簿,UDF 将随之保存。如果您使用的是 2003 之后的 Excel 版本,则必须将文件保存为 .xlsm 而不是 .xlsx

要删除 UDF:

  1. 调出如上所示的 VBE 窗口
  2. 清除代码
  3. 关闭 VBE 窗口

要从 Excel 使用 UDF:

=我的函数(A1)

要了解有关宏的更多信息,请参阅:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

有关 UDF 的详细信息,请参阅:

http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx

必须启用宏才能使其工作!

答案2

仅使用 Excel 中已有的函数即可解决您的问题。我使用了此关联然后针对您的问题进行了调整。假设您的产品在 A 列,您的值在 B 列,请使用以下公式:

=IFERROR(INDEX($B$2:$B$20,SMALL(IF($A$2:$A$20=$E$3;ROW($A$2:$A$20)-1);ROW()-2));"")

按 ctrl+shift+enter(数组公式)输入并向下拖动以查看所有出现的情况。

它是如何工作的?该if函数首先检查查找范围中的值是否等于查找值,如果是,则返回该值的索引。(您必须这样做,row(..)-1因为您的数据从第 2 行开始。row()-2最后是为了确保您在向下拖动时获得最小值的第一次、第二次……出现。需要 -2,因为您的公式将出现在工作表的第三行。我最终将所有内容包装在一个iferror函数中,因此只会显示好的值,而不会显示错误消息。

答案3

几种非 VBA 方法:

公式:

标题位于第 1 行,数据位于列A:B中:=MIN(Product)E3

F3: =IFERROR(INDEX(Value,AGGREGATE(15,6,1/1/(Product=$E$3)*ROW(Product),ROWS($1:1))-1),"")

正常输入并填写直至看到空白

在此处输入图片描述

你可以种类产品数据,然后使用以下条件格式:

O12假设您的排序表从第一行数据开始O13

=O13=O12

Format As:   Custom Number Format:  ;;;

在此处输入图片描述

相关内容