我有两列,A
和B
。列中B
包含我需要在列中查找的值A
。但是,我不需要找到确切的对应值,我需要下一个更高的值。
例如:
Column A Column B
2 3
4 4
5 5
7 6
8 8
9 9
5
因此,对于列中的值B
,我想7
从列中返回A
。
我想我可能需要某种形式的查找/索引匹配函数,但我自己无法编写公式。
答案1
已排序
A
最简单的公式适用于列按升序排序的情况:
输入以下公式C1
,然后按 ctrl-enter/copy-paste/fill-down/auto-fill 将其填充到表格其余列中:
=INDEX(A:A,1+MATCH(B1,A:A,1))
解释:
作为1
第三个参数意味着MATCH()
它会找到小于或等于第一个参数的最大值。将该1
索引添加到该索引会得到下一个更大数字的索引。INDEX()
然后该函数提取该数字。
请注意,我在列末尾添加了一个额外的值A
。这是为了应对没有下一个更高值的特殊情况。
未分类
对于列未排序的情况A
(如果已排序也有效),公式会稍微复杂一些:
数组中输入(Ctrl++ )以下公式并将Shift其复制粘贴/填充到表格列的其余部分(不要忘记删除 and ):EnterC1
{
}
{=SMALL(IF($A$1:$A$6>B1,$A$1:$A$6),1)}
解释:
该函数返回数组中第 n 个最小的值,SMALL(array,n)
忽略布尔值IF()
。由于该函数的第三个参数的默认值为,因此只检查FALSE
大于列中值的值,从而得出下一个更高的值。B
A
请注意,列不需要特殊的终止值,因为#NUM!
如果列 中没有A
大于列中的值的值,则会导致错误B
。
最后,正如 aventurin 指出的那样,还有一种替代的、类似的公式,无论如何排序都可以起作用(但有一个重要的警告)。
对于 Excel 2016+:
=MINIFS($A$1:$A$6,$A$1:$A$6,">"&B1)
这是有效的,因为该MINIFS()
函数在提取最小值之前会过滤掉不符合条件的值。
对于早期版本的 Excel:
{=MIN(IF($A$1:$A$6>B1,$A$1:$A$6))}
其工作原理与SMALL()
函数相同——它忽略了函数生成的布尔值IF()
。
警告:
如果零可以作为正确的下一个更高值,则=MINIFS()
和公式都将无法正常工作,因为当存在{=MIN(IF())}
是没有下一个更高的值。(这与第一个公式在列末尾添加额外值的原因相同A
- 如果没有更高的值,该公式也会返回零。)
答案2
您可以使用例如数组函数{=MIN(IF(A1:A6 > B1; A1:A6))}
或{=MIN(IF(A1:A6 > B1; A1:A6; 1000))}
(以 1000 作为后备值)。
它取 A 列中所有大于 B 列当前单元格的值的最小值(此处B1
)。因此,两列都无需排序。
使用 Excel >= 2016 您也可以使用该MINIFS
函数。
请注意,必须按 插入数组函数Ctrl+Shift+Enter
。