问题描述
我有一个这样的工作表,其中A1:C14
记录每天不同水箱的温度。
我想制作一个Excel公式或vba宏,它能够提取每个水箱的最新温度,以便我可以在E1:G6
中填写新表格?
如何编写能够做到的代码?
- 找到正确的战车
- 查找每个油箱的最新测量日期
- 给出所选水箱的温度值
我尝试应用此公式,但感到更加困惑:
=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))
,
您还可以使用用户定义的功能。
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