Excel公式:对于列中每个值的实例,获取同一行中另一列的值

我正在寻找解决在Excel中的以下问题:

ID Key Value 1 10 20 2 5 30 3 10 20 4 10 20 

如果键== 10和值== 20,获取ID。

所以,我需要这个产生以下列表:“1,3,4”

本质上,我正在查看是否有一个值在给定的范围内,另一个值在另一个范围内,给我在另一个范围内的相应的值(同一行)。

我不能认为ID列将始终是最左边的列。

您可以使用附加的用户定义function。 从您的工作表中调用它,如下所示:

= concatPlusIfs(A1:A4, “”,1,10,2,20)

哪里

  • A1:A4是ID列表
  • “,”是分隔符
  • 1是你的id列和你的关键列之间的偏移量(-1表示左边的1列)
  • 10是您的密钥的标准
  • 2是您的id列和您的Value列之间的偏移量
  • 20是你的价值标准

     Public Function concatPlusIfs(rng As Range, sep As String, lgCritOffset1 As Long, varCrit1 As Variant, lgCritOffset2 As Long, varCrit2 As Variant, Optional noDup As Boolean = False, Optional skipEmpty As Boolean = False) As String Dim cl As Range, strTemp As String If noDup Then 'remove duplicates, use collection to avoid them Dim newCol As New Collection On Error Resume Next For Each cl In rng.Cells If skipEmpty = False Or Len(Trim(cl.Text)) > 0 Then If cl.Offset(, lgCritOffset1) = varCrit1 And cl.Offset(, lgCritOffset2) = varCrit2 Then newCol.Add cl.Text, cl.Text End If Next For i = 0 To newCol.Count strTemp = strTemp & newCol(i) & sep Next Else For Each cl In rng.Cells If skipEmpty = False Or Len(Trim(cl.Text)) > 0 Then If cl.Offset(, lgCritOffset1) = varCrit1 And cl.Offset(, lgCritOffset2) = varCrit2 Then strTemp = strTemp & cl.Text & sep End If Next End If concatPlusIfs = Left(strTemp, Len(strTemp) - Len(sep)) End Function 

我会说这是excel的最基本的function,但是由于你承担了人为的限制,你不能决定你的列将如何sorting – 那么它需要你使用像HLOOKUP(假设你至less可以确定你的头):

 =IF(AND(HLOOKUP("Key",$A$1:$C$5,ROW(),FALSE)=10,HLOOKUP("VALUE",$A$1:$C$5,ROW(),FALSE)=20),HLOOKUP("ID",$A$1:$C$5,ROW(),FALSE),"") 

HLOOKUP_EXAMPLE

祝你好运。

编辑/添加:

使用多functionfunction: http : //www.mcgimpsey.com/excel/udfs/multicat.html

例如sorting你的表摆脱空间,然后:

 =multicat(C2:C5,",") 

或者,如果sorting对你来说太多了 – 你可以使用mcgimpsey函数的这个修改版本去掉空白单元格:

  Public Function MultiCat( _ ByRef rRng As Excel.Range, _ Optional ByVal sDelim As String = "") _ As String Dim rCell As Range For Each rCell In rRng If rCell.Value <> "" Then MultiCat = MultiCat & sDelim & rCell.Text End If Next rCell MultiCat = Mid(MultiCat, Len(sDelim) + 1) End Function