VLOOKUP和插值

时间:2017-03-18 16:58:01

标签: excel excel-formula interpolation vlookup

我正在尝试检查表格中的特定数据,如果我找到了数据,它将显示数据。我用VLOOKUP做到了。但是现在如果数据不在表中,我想在两组数据之间进行插值。但我不知道该怎么做。

所以我想要的是检查一个数字是否在表格中,以及它是否需要插值。

Exapmle:

2,50           4523
2,52           4687
2,54           4790

我想:2,50 显示:4523

我想要:2,51(我不想插入(4687 + 4523)/ 2)

显示:内插数字

编辑:

Vlookup公式:

=VLOOKUP(F3;Tabel3;2;FALSE)

EXCEL Screenshot

enter image description here

3 个答案:

答案 0 :(得分:3)

如果VLOOKUP失败,IFERROR可以将处理传递给另一个公式。如果查找值(2,50; 2,52; 2,54)是按升序排列的真数,则MATCH与1作为 range_lookup 参数将检索较低值的行号。使用OFFSET来实现AVERAGE的范围。

=IFERROR(VLOOKUP(F3,A:B,2,FALSE),AVERAGE(OFFSET(INDEX(B:B,MATCH(F3,A:A,1)),0,0,2,1)))

enter image description here

答案 1 :(得分:2)

enter image description here

在上图中,A1:B3包含您的输入数据,D列包含您要查找的值,E列包含查找公式。

E5中的公式为:

=IF(ISNA(VLOOKUP(D5, A:B, 2, FALSE)), AVERAGE(VLOOKUP(D5, A:B, 2, TRUE),MINIFS(B:B,B:B,">" &VLOOKUP(D5, A:B, 2, TRUE))), VLOOKUP(D5, A:B, 2, FALSE))

将其格式化以便于阅读,它变为:

1: =IF(
2:    ISNA(VLOOKUP(D5, A:B, 2, FALSE)), 
3:    AVERAGE(
4:        VLOOKUP(D5, A:B, 2, TRUE),
5:        MINIFS(B:B,B:B,">" &VLOOKUP(D5, A:B, 2, TRUE))
6:    ), 
7:    VLOOKUP(D5, A:B, 2, FALSE)
8: )

解释公式

该行:

2: ISNA(VLOOKUP(D5, A:B, 2, FALSE)) 
如果TRUE失败,则

返回VLOOKUP。仅当未找到完全匹配时,此查找才会失败(因为最后一个参数为false,它会查找完全匹配)。

如果第2行上面的ISNA()函数返回FALSE,则找到完全匹配,并且该语句返回该值:

7: VLOOKUP(D5, A:B, 2, FALSE) 

出现在最后一行。

但是,如果第2行的ISNA()返回TRUE,则找不到完全匹配,导致通过以下块返回平均值(插值):

3:    AVERAGE(
4:        VLOOKUP(D5, A:B, 2, TRUE),
5:        MINIFS(B:B,B:B,">" &VLOOKUP(D5, A:B, 2, TRUE))
6:    ), 

这里,第4行的VLOOKUP()与其他两个查找略有不同 - 最后一个参数是TRUE,表示范围查找(不精确匹配)。范围查找的documentation for VLOOKUP states

  

TRUE假定表中的第一列也是排序的   以数字或字母顺序排列,然后搜索最近的   值。如果您未指定,则这是默认方法。

当列A按升序排序时,2,51的范围查找返回对应于2,50的值(即较低的值),即4523.这是插值的较低值。

第5行为插值提供了更高的值:

5:        MINIFS(B:B,B:B,">" &VLOOKUP(D5, A:B, 2, TRUE)) 

它在列B中搜索最小值(使用MINIFS函数),但应用最小值应大于第4行中查找所找到的值的条件。如果第4行的查找返回4523,然后这一行搜索B列中大于4523的最小值,得到4687.这是插值的上限。

获得这两个值后,第3行的AVERAGE函数返回平均值4523和4687,即4605。

注1 :请注意,您必须单独处理边缘情况(例如2,49或2,55),提供的公式不会这样做。我没有这样做,以便将这个答案集中在你的插值问题上。

注2 :上述公式(特别是第5行)假设B列中的值随着A列中的值的增加而增加。如果B列中的值相对于A列中的值没有增加,则MINIFS函数将不会返回正确的值。在这种情况下,您将使用MINIFSMATCH函数代替INDEX函数来查找后续行中的值。即第5行将使用以下公式(而不是MINIFS):

5: INDEX(B:B,MATCH(VLOOKUP(D5, A:B, 2, TRUE),B:B,0)+1) 

答案 2 :(得分:2)

使用此项(D5字段中的2.51)

=FORECAST(D5,OFFSET($B$1,MATCH(TRUE,$A$1:$A$100<=D5,0),,2),OFFSET($A$1,MATCH(TRUE,$A$1:$A$100<=D5,0),,2))

确认 ctrl + shift + enter (不仅仅是输入)。 它还将考虑加权平均值(即2.51和2.505的不同输出)