Vlookup可以在excel中返回一个公式吗?

时间:2017-04-03 12:11:54

标签: excel excel-formula average

我正在尝试使用excel中的n函数来返回公式。我在这里发现很多关于使用VLOOKUP的问题,但问题略有不同。

我试图在指定日期(在C栏中)获得一周的平均温度(来自B栏),可在A栏中找到。

更简单地说:

如果单元格 C2中的日期存在于 A中,请从列 B中的范围返回平均值。

到目前为止,这是我最接近的(感谢SO上的其他QA):

VLOOKUP

然而,使用=VLOOKUP(C2, A1:B660, AVERAGE(B124:B130), FALSE) 函数代替列号(通常是使用的参数)似乎不起作用。

我附上了一张非常简化的数据图片:

Data

如果AVERAGE是错误的功能来处理这个更好的方法? 我在Mac上运行Excel 15.32。

修改

虚拟数据: https://www.dropbox.com/s/rblk943k2zf71tw/dummy%20data.xlsx?dl=0

4 个答案:

答案 0 :(得分:2)

怎么样:

=AVERAGE(OFFSET($B:$B,MATCH($C2,$A:$A,0)-1,0,-7))

这假设第1行有一个标题。

  • 从C2
  • 中的条目中查找A列中的匹配日期
  • 创建一个B列值数组,从该点算回一周
  • 该阵列的平均值。

例如,您可以在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)))

enter image description here

答案 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)