簡體   English   中英

Excel公式:對於列中值的每個實例,獲取同一行中另一列的值

[英]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)

哪里

  • A1:A4是ID列表
  • “,”是分隔符
  • 1是您的id列和鍵列之間的偏移量(-1代表左側的1列)
  • 密鑰的標准是10
  • 2是您的id列和“值”列之間的偏移量
  • 價值的准則是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),"")

HLOOKUP_EXAMPLE

祝好運。

編輯/添加:

使用以下網址中的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM