索引匹配使用多个搜索条件查找最接近的值

时间:2018-04-28 12:12:18

标签: google-sheets

我试图找到索引匹配最接近的绝对值。我查看了其他一些帖子,例如here,但我想要做的是有点不同,因为我想添加多个搜索标准。

正如您所见screen shot,我正试图获得特定人的绝对最近时间。

我使用的是公式=索引(C2:C21,匹配(F4,B2:B21,-1),匹配(E4,A2:A21,0))我必须复制C列中的B列才能生成我的第一场比赛工作。结果显示在G4中。不幸的是,我很难得到正确的结果。

有效地,我想使用上一篇文章中公布的公式(参见顶部的链接)= INDEX(E2:E21,MATCH(TRUE,INDEX(ABS(D1:D21-I4)= MIN(INDEX( ABS(D2:D21-I4),,)),,),0)) 带有搜索条件(人名)。

非常感谢任何帮助

谢谢

谢谢@avram 我仍然会遇到一些公式不起作用的情况。见下文。在G6和G7中,我应该得到10:25。 (您可以忽略A列) screen shot 2

3 个答案:

答案 0 :(得分:1)

使用“帮助”列的非常简单的方法,其中包含以下数据:

enter image description here

我们希望拉里最接近绝对匹配到上午10:15。我们在 F1 中的 E1 10:15 中输入 larry

然后在 D2 中输入:

=IF(A2=$E$1,ABS(B2-$F$1),"")

并向下复制。 (这是拉里的绝对差异)最后在 E2

=INDEX(B:B,MATCH(MIN(D:D),D:D,0))

enter image description here

如果更大的表包含更多列,则可以根据需要添加其他条件。

答案 1 :(得分:1)

此回答使用Array Formulas,必须使用CTRL + SHIFT + ENTER输入。它有点复杂,所以我会尽力解释并在必要时进行修改。这是一个屏幕截图:Screenshot

这是原始形式的公式;名称输入A列,B列中的时间。 =INDEX(B1:B7,MATCH(MIN(IF(A1:A7=D2,ABS(E2-B1:B7),"")),IF(A1:A7=D2,ABS(E2-B1:B7),"")))

正如您可能怀疑的那样,它使用INDEX/MATCH来完成工作,但关键是使用IF语句生成搜索条件和MATCH函数的数组在内搜索。让我们分解吧。

第1节,匹配搜索数组 IF(A1:A7=D2,ABS(E2-B1:B7),"") 这将为匹配函数创建搜索数组。如果D2(我们的标准)中的名称等于搜索数组中的名称,它将返回标准时间与我们正在搜索的数组中的时间之间差异的绝对值。否则返回空值。不要为此使用0,因为它会使匹配结果偏斜。

第2节,匹配搜索条件 MIN(IF(A1:A7=D2,ABS(E2-B1:B7),"")) 这告诉我们上面数组中的最小值。我们使用此值作为MATCH函数中的搜索条件。

第3节,1& 2在一起 MATCH(MIN(IF(A1:A7=D2,ABS(E2-B1:B7),"")),IF(A1:A7=D2,ABS(E2-B1:B7),""))这将搜索第1节中创建的数组中第2节中定义的最小abs差异,并返回行号。

第4节,索引时间 =INDEX(B1:B7,MATCH(MIN(IF(A1:A7=D2,ABS(E2-B1:B7),"")),IF(A1:A7=D2,ABS(E2-B1:B7),""))) 这将返回上一个匹配函数标识的任何行中B列的时间值。

希望这一切都有道理。请记住将其作为数组公式输入。

答案 2 :(得分:0)

在G4中尝试此公式,

=index(C$2:C$21, match(min(index(abs(index(C$2:C$21+(B$2:B$21<>E4)*1E+99, , )-F4), , )), if(B$2:B$21=E4, abs(C$2:C$21-F4), 1E+99), 0))

这将作为标准(非阵列/非CSE)公式或作为数组(CSE)公式的

enter image description here

如果有其他人想要使用更优雅的公式来解决此问题,您可以从此公开共享的Google工作表中复制样本数据。

Index match find closest value with multiple search criteria

也许这可以免除第四个人重新输入操作图像中提供的相同疲惫数据。