我正在尝试使用excel中的n
函数来返回公式。我在这里发现很多关于使用VLOOKUP
的问题,但问题略有不同。
我试图在指定日期(在C栏中)获得一周的平均温度(来自B栏),可在A栏中找到。
更简单地说:
如果单元格 C2中的日期存在于列 A中,请从列 B中的范围返回平均值。
到目前为止,这是我最接近的(感谢SO上的其他QA):
VLOOKUP
然而,使用=VLOOKUP(C2, A1:B660, AVERAGE(B124:B130), FALSE)
函数代替列号(通常是使用的参数)似乎不起作用。
我附上了一张非常简化的数据图片:
如果AVERAGE
是错误的功能来处理这个更好的方法?
我在Mac上运行Excel 15.32。
修改
虚拟数据: https://www.dropbox.com/s/rblk943k2zf71tw/dummy%20data.xlsx?dl=0
答案 0 :(得分:2)
怎么样:
=AVERAGE(OFFSET($B:$B,MATCH($C2,$A:$A,0)-1,0,-7))
这假设第1行有一个标题。
例如,您可以在D列中填充此列,并根据需要进行调整。
OFFSET
函数的一个问题是它是易失性的,因此如果工作表上有任何更改,所有公式都会重新计算。
以下内容,至少在Excel的更高版本中,应该是非易失性的:
=AVERAGE((INDEX($A:$B,MATCH($C2,$A:$A)-6,2,1):INDEX($A:$B,MATCH($C2,$A:$A,0),2)))
我会留给你处理检查第2-6行中日期的错误。
答案 1 :(得分:2)
使用INDEX作为单元格引用,MATCH定位主日期并使用该位置以及该位置减去6的范围。
=AVERAGE(INDEX(B:B, MATCH(C2, A:A, 0)-6):INDEX(B:B, MATCH(C2, A:A, 0)))
答案 2 :(得分:1)
我认为你在寻找的是:
=IF(COUNTIF(A1:A660,C2)=0,0,AVERAGE(B124:B130))
这表示如果在A1:B660中找不到C2,则返回0,否则返回AVERAGE(B124:B130)。
答案 3 :(得分:0)
我会推荐一种不同的方法。仍然使用a.shape = [4,1]
,我会使用下面的内容。然而,将有一种更简单/更优雅的方式来完成这项工作。
如果找到,请使用In [26]: a = np.array([1,2,3,4])
In [27]: a.shape = [4,1]
In [28]: a.shape
Out[28]: (4, 1)
In [29]: a
Out[29]:
array([[1],
[2],
[3],
[4]])
返回值。真的,你不关心它返回的价值。
VLOOKUP
包裹VLOOKUP
以处理未找到的日期。在这里,我让它返回-1。
=VLOOKUP(C2,A:B,2,FALSE)
如果IFNA
返回某些内容,请使用IF语句计算平均值,如果找不到则执行其他操作。
=IFNA(VLOOKUP(C2,A:B,2,FALSE),-1)