如何在excel中提取满足多个行和列条件的值?

问题描述

我有一个这样的工作表,其中A1:C14记录每天不同水箱的温度。

img

我想制作一个Excel公式或vba宏,它能够提取每个水箱的最新温度,以便我可以在E1:G6中填写新表格?

如何编写能够做到的代码

  1. 找到正确的战车
  2. 查找每个油箱的最新测量日期
  3. 给出所选水箱的温度值

我尝试应用此公式,但感到更加困惑:

=INDEX(,SMALL(IF(COUNTIF(,),MATCH(,""),ROWS),COLUMNS)

谢谢大家!

解决方法

如果列A中的日期按升序排序,则可以在单元格G2中使用以下公式并向下复制。

=LOOKUP(2,1/(B:B=E2),C:C)

检查this article是否有类似内容。

,

这是解决您的问题的相当快的尝试。

首先,请确保您的日期值实际设置为日期格式(例如,2020年8月20日)

然后在F列中可以使用:

= MAX(IF($ B $ 2:$ B $ 15 = $ E2,$ A $ 2:$ A $ 15))

查找每次读取的最新日期。

然后在G列中使用:

= INDEX($ C $ 2:$ C $ 14,MATCH(1,IF($ A $ 2:$ A $ 14 = $ F2,IF($ B $ 2:$ B $ 14 = $ E2,1)),0) )

查找最近一次读取日期每个油箱的值。

我建议您使用范围,以便您可以插入行并自动增加日期范围等。

将上面两个单独的公式组合为一个公式可能并不难。但是通过这种方式,您可以看到发生了什么,我认为每个坦克的最新读取日期可能会有用吗?

,

如果未对日期进行排序,则可以使用INDEX / AGGREGATE函数:

=INDEX($C$2:$C$14,AGGREGATE(14,6,(AGGREGATE(14,($A$2:$A$14)*($B$2:$B$14=E2),1)=$A$2:$A$14)*(E2=$B$2:$B$14)*ROW($C$2:$C$14)-1,1))

enter image description here

,

您还可以使用用户定义的功能。

Function myTemp(s As Range)
    Application.Volatile
    Dim vDB
    Dim myS As Single
    Dim myDay As Date
    Dim i As Long,r As Long
    
    vDB = Range("a1",Range("c" & Rows.Count).End(xlUp))

    r = UBound(vDB,1)
    For i = 2 To r
        If vDB(i,2) = s Then
            If vDB(i,1) >= myDay Then
                myDay = vDB(i,1)
                myS = vDB(i,3)
            End If
        End If
    Next i
    myTemp = myS
End Function

enter image description here