Vlookup可以在Excel中返回公式吗?
我想在Excel中使用VLOOKUP
函数来返回一个公式。 关于使用VLOOKUP
我在这里发现了很多,但是有一个稍微不同的问题。
我正在试图获得A列中可以find的特定date(C列)之前一周的平均气温(来自B列)。
更简单地说:
如果单元格 C2中的date存在于列 A中, 则从列 B中的范围返回平均值 。
到目前为止,这是我得到的最接近的(感谢SO上的其他QA):
=VLOOKUP(C2, A1:B660, AVERAGE(B124:B130), FALSE)
但是,使用AVERAGE
函数代替列号(通常是使用的参数)似乎不起作用。
我附上了一个非常简化的数据图片:
如果VLOOKUP
是错误的函数来处理这将是一个更好的方法? 我在Mac上运行Excel 15.32。
编辑:
虚拟数据: https : //www.dropbox.com/s/rblk943k2zf71tw/dummy%20data.xlsx? dl = 0
关于什么:
=AVERAGE(OFFSET($B:$B,MATCH($C2,$A:$A,0)-1,0,-7))
这假定第1行中的标题。
- 从C2中的条目中find列A中匹配的date
- 创build一个列B值的数组,从那一点算起一周
- 平均数组。
例如,您可以填写D列,并根据需要进行调整。
OFFSET
函数的一个问题是它是易失性的,所以如果在工作表上有任何改变,所有的公式都会重新计算。
以下至less在更高版本的Excel中应该是非易失性的:
=AVERAGE((INDEX($A:$B,MATCH($C2,$A:$A)-6,2,1):INDEX($A:$B,MATCH($C2,$A:$A,0),2)))
我将留给你来处理2-6行检查date的错误。
使用INDEX作为MATCH的单元格引用来定位主date,并使用该位置以及该位置减去6的范围。
=AVERAGE(INDEX(B:B, MATCH(C2, A:A, 0)-6):INDEX(B:B, MATCH(C2, A:A, 0)))
我觉得你要找的是这样的:
=IF(COUNTIF(A1:A660,C2)=0,0,AVERAGE(B124:B130))
这表示如果在A1:B660中找不到C2,则返回0,否则返回平均值(B124:B130)。
我会推荐一个不同的方法。 仍然使用VLOOKUP
,我会去下面。 然而,将会有一个更容易/更优雅的方式来完成这个工作。
-
如果find,使用
VLOOKUP
返回一个值。 真的,你不关心它返回的价值。=VLOOKUP(C2,A:B,2,FALSE)
-
裹在
IFNA
处理date未find。 在这里,我已经得到它返回-1。=IFNA(VLOOKUP(C2,A:B,2,FALSE),-1)
-
如果
VLOOKUP
返回一些东西,请使用IF语句计算出平均值,如果没有find,则执行其他操作。
=IF(IFNA(VLOOKUP(C2,A:B,2,FALSE),-1)<>-1,AVERAGE(B124:B130),"do something else")