如何在 excel 中提取满足多个行和列条件的值?
How do I extract a value in excel that meets multiple row and column criteria?
我有一个这样的工作表,其中A1:C14
每天记录不同水箱的温度。
我想制作一个 excel 公式或 vba 宏,能够提取每个水箱的最新温度,以便我可以在 [= 中填写新的 table 13=]?
如何编写能够:
- 找到正确的坦克
- 找到每个罐被测量的最晚日期
- 给出所选水箱的温度值
我尝试应用这个公式,但变得更加困惑:
=INDEX(,SMALL(IF(COUNTIF(,),MATCH(,),""),ROWS),COLUMNS)
谢谢大家!
如果 A
列中的日期是升序排列的,那么您可以在 G2
单元格中使用以下公式并向下复制。
=LOOKUP(2,1/(B:B=E2),C:C)
查看 this article 是否有类似内容。
如果日期未排序,您可以使用 INDEX
/ AGGREGATE
函数:
=INDEX($C:$C,AGGREGATE(14,6,(AGGREGATE(14,6,($A:$A)*($B:$B=E2),1)=$A:$A)*(E2=$B:$B)*ROW($C:$C)-1,1))
这是解决您的问题的一种相当快速的尝试..
首先,确保您的日期值实际上被格式化为日期(即 08/20/2020)
然后在 F 列中您可以使用:
=MAX(IF($B:$B=$E2,$A:$A))
查找每个坦克读取的最新日期。
然后在 G 列中使用:
=INDEX($C:$C,MATCH(1,IF($A:$A=$F2,IF($B:$B=$E2,1)),0))
查找每个罐在最新读取日期的值。
我建议您使用范围,这样您就可以插入行并自动增加日期范围等。
将上面两个单独的公式组合成一个公式可能并不难。但是这样你就可以看到发生了什么,我认为每个坦克的最新阅读日期可能有用吗?
您还可以使用 user-defined 函数。
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
我有一个这样的工作表,其中A1:C14
每天记录不同水箱的温度。
我想制作一个 excel 公式或 vba 宏,能够提取每个水箱的最新温度,以便我可以在 [= 中填写新的 table 13=]?
如何编写能够:
- 找到正确的坦克
- 找到每个罐被测量的最晚日期
- 给出所选水箱的温度值
我尝试应用这个公式,但变得更加困惑:
=INDEX(,SMALL(IF(COUNTIF(,),MATCH(,),""),ROWS),COLUMNS)
谢谢大家!
如果 A
列中的日期是升序排列的,那么您可以在 G2
单元格中使用以下公式并向下复制。
=LOOKUP(2,1/(B:B=E2),C:C)
查看 this article 是否有类似内容。
如果日期未排序,您可以使用 INDEX
/ AGGREGATE
函数:
=INDEX($C:$C,AGGREGATE(14,6,(AGGREGATE(14,6,($A:$A)*($B:$B=E2),1)=$A:$A)*(E2=$B:$B)*ROW($C:$C)-1,1))
这是解决您的问题的一种相当快速的尝试..
首先,确保您的日期值实际上被格式化为日期(即 08/20/2020)
然后在 F 列中您可以使用:
=MAX(IF($B:$B=$E2,$A:$A))
查找每个坦克读取的最新日期。
然后在 G 列中使用:
=INDEX($C:$C,MATCH(1,IF($A:$A=$F2,IF($B:$B=$E2,1)),0))
查找每个罐在最新读取日期的值。
我建议您使用范围,这样您就可以插入行并自动增加日期范围等。
将上面两个单独的公式组合成一个公式可能并不难。但是这样你就可以看到发生了什么,我认为每个坦克的最新阅读日期可能有用吗?
您还可以使用 user-defined 函数。
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