![](/img/trans.png)
[英]Excel formula: For each instance of peak/bottom value in column, get range/distance to the second next peak/bottom
[英]Excel formula: For each instance of value in column, get value of another column in same row
我正在尋找解決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列將始終是最左側的列。
為此,您可以使用隨附的用戶定義功能。 從您的工作表中調用它,如下所示:
= 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
我想說這是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),"")
祝好運。
編輯/添加:
使用以下網址中的multicat函數: http : //www.mcgimpsey.com/excel/udfs/multicat.html
例如,對表進行排序以除去空格,然后:
=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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.