我希望在Excel中解决以下问题:
ID Key Value
1 10 20
2 5 30
3 10 20
4 10 20
如果key == 10且Value == 20,请获取ID。
所以,我需要这个来产生以下列表:“1,3,4”
基本上,我想查看一个值是否在给定范围内,另一个值是否在另一个范围内,在另一个范围内给出相应的值(同一行)。
我不能假设ID列总是最左边的列。
答案 0 :(得分:1)
您可以使用附加的用户定义函数来实现此目的。从您的工作表中调用它,如下所示:
= concatPlusIfs(A1:A4, “”,1,10,2,20)
其中
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
答案 1 :(得分:0)
我想说这是excel的最基本功能但是由于你假设人为限制你不能决定你的列将如何订购 - 那么它需要你使用像HLOOKUP这样的东西(假设你可以在最少确定你的标题):
=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),"")
祝你好运。
修改/ ADDITION:强>
使用来自http://www.mcgimpsey.com/excel/udfs/multicat.html
的多项功能e.g。 对表格进行排序以除去空格,然后:
=multicat(C2:C5,",")
或者如果排序对你来说太多了 - 你可以使用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