当键值相同时查找名称(Microsoft Excel)
吉姆描述了一种情况,其中列出了员工姓名及其工资。他想确定谁是收入最高的五名员工。他使用LARGE函数确定五个最大的薪水,然后尝试使用VLOOKUP返回属于那些薪水的姓名。除非前五名的薪金重复(人们获得相同的薪水),否则此方法效果很好。如果存在,则VLOOKUP仅返回该薪水的第一位雇员的姓名。
要返回所有专有名称,您可以做几件事。
一种方法是完全不使用公式。相反,您可以在Excel中使用自动筛选功能:
。选择数据表中的任何单元格。
。选择数据|筛选器|自动筛选。 Excel在表中每个列标题的右侧添加下拉箭头。
。使用“薪金”列顶部的下拉列表选择“前10名”。Excel将显示“前10名自动筛选”对话框。 (请参见图1。)
。将中央控制从10调整到5。
。单击确定。 Excel在列表中显示前五名的薪水。
当您按照这些步骤,您实际上可能最终会看到五个以上的记录,特别是如果员工工资中有联系。筛选器将确定前五名的薪水,然后显示所有薪水与之匹配的记录。
如果您不想使用自动筛选,另一种选择是简单地确保员工列表中的每条记录都具有唯一性。例如,如果员工姓名在B列中,而薪水在C列中,则可以在A列中使用以下公式使每条记录唯一:
=C2+ROW()/100000000
这将添加行号除以100,000,000,并获得唯一值。例如,如果您在第2行和第A列中具有相同的薪水98,765.43和A列中的薪金将为:
98765.43000002 98765.43000049
较大的数字(100,000,000)使得如果在65536行中具有相同的数字,则会得到:
98765.43065536
即使在这种情况下,四舍五入到小数点后两位的值仍然是实数。如果使用A列中的“非唯一”值完成了LARGE和VLOOKUP,则根据人员在列表中的位置,您将返回最高薪水(及其相关人员)。
第三种方法是使用RANK和COUNTIF函数为薪水列表中的每个值返回唯一的“排名”。如果薪水在B1:B50范围内,请在单元格C1中输入以下内容并将其复制到该范围内:
=RANK(B1,$B$1:$B$50)+COUNTIF($B$1:B1,B1)-1
现在,您可以在排名值上使用INDEX来返回与每个薪水相关的名称。
最后,第四种方法是创建一个可以返回所需信息的宏。可以通过多种方式来实现宏。以下只是其中之一:
Function VLIndex(vValue, rngAll As Range, _ iCol As Integer, lIndex As Long) Dim x As Long Dim lCount As Long Dim vArray() As Variant Dim rng As Range On Error GoTo errhandler Set rng = Intersect(rngAll, rngAll.Columns(1)) ReDim vArray(1 To rng.Rows.Count) lCount = 0 For x = 1 To rng.Rows.Count If rng.Cells(x).Value = vValue Then lCount = lCount + 1 vArray(lCount) = rng.Cells(x).Offset(0, iCol).Value End If Next x ReDim Preserve vArray(1 To lCount) If lCount = 0 Then VLIndex = CVErr(xlErrNA) ElseIf lIndex > lCount Then VLIndex = CVErr(xlErrNum) Else VLIndex = vArray(lIndex) End If errhandler: If Err.Number <> 0 Then VLIndex = CVErr(xlErrValue) End Function
传递给该用户定义函数的参数是值,要查找的像元范围,该范围的查找偏移量(右侧的列数为正,左侧的列数为负),并且重复项的编号(1是第一个值,2是第二个值,依此类推)。
例如,要使用它,请假设A1:B1包含列标题,A2:A100包含薪水,B2:B100包含员工名称。
在E2单元格中,您可以输入以下内容以确定表中的最高薪水:
=LARGE($A$2:$A$100,ROW()-1)
在单元格F2中,您可以输入以下公式以确定该行是否有重复项,并跟踪该重复项的当前“值”:
=IF(E2=E1,1+F1,1)
在单元格G2中,您可以使用以下公式,该公式调用用户定义的函数:
=VLIndex(E2,$A$2:$A$100,1,F2)
将单元格E2:G2复制到E3:G6,您将(在G列中)拥有薪水最高的五个员工的姓名。
注意:
如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。
_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。
本技巧(3077)适用于Microsoft Excel 97、2000、2002和2003。