【问题标题】:Get the next number greater than a number from a row matching another number in Excel从与 Excel 中的另一个数字匹配的行中获取大于数字的下一个数字
【发布时间】:2017-04-24 14:33:53
【问题描述】:

所以我在 Excel 中有这张表

    A  B  C  D  E  F
  __________________
1 | X  1  5 10     Y
2 | Y  2  4  9     5
3 | Z  3  7  8

我希望能够从 A 列输入一个字符(或数字)和一个数字,并有一个公式可以输出与输入字符匹配的行中等于或大于输入数字的下一个数字。

示例:在表格中输入的字符 Y 和数字 5 应生成 9,即第 2 行中大于 5 的下一个数字。

我一直在尝试找到 Index 和 Match 的组合,但无法让它发挥作用。我猜它应该看起来像这样:

INDEX(B:D;MATCH(TRUE;INDEX(B:D;MATCH(F1;A:A;0);0)>=F2;0))

任何帮助将不胜感激。

【问题讨论】:

  • 你的数字是从左到右升序排列的吗?如果可以的话,可以利用这个吗?
  • 是的。它们是管道壁厚,第一列是管道的 DN 编号。

标签: excel excel-formula


【解决方案1】:
=AGGREGATE(15,6,$B$1:$D$3/(($A$1:$A$3=F1)*($B$1:$D$3>=F2)), 1) 'Ctrl+Shift+Enter

【讨论】:

  • 谢谢。这个可行,但资源太重。我有一个比示例中的表大一点的表,我需要计算大约一百次。在进行几行计算后,我收到一条关于 Excel 资源不足的错误消息。你能想到一些更轻的重量吗? :)
  • @KáriRafnKarlsson 如果你想要一个我能想到的最好的公式。替代方案应该是使用辅助列,一个找到“Y”行,另一个在该行中建立索引。您也可以使用 VBA 循环,但这会慢得多,尽管占用的内存更少。
  • 好的。谢谢你。通过明确定义范围,而不是单独使用列,我确实设法让它更好地工作。
  • @KáriRafnKarlsson 哦,我明白了,它肯定应该让它更快并减少内存使用。 :)
【解决方案2】:

这是一个纯粹的 INDEX/MATCH 版本,它在整个列上仍然很快

=IFERROR(IF(F2<INDEX(B:D,MATCH(F1,A:A,0),1),INDEX(B:D,MATCH(F1,A:A,0),1),IF(INDEX(INDEX(B:D,MATCH(F1,A:A,0),0),MATCH(F2,INDEX(B:D,MATCH(F1,A:A,0),0)))=F2,INDEX(INDEX(B:D,MATCH(F1,A:A,0),0),MATCH(F2,INDEX(B:D,MATCH(F1,A:A,0),0))),INDEX(INDEX(B:D,MATCH(F1,A:A,0),0),MATCH(F2,INDEX(B:D,MATCH(F1,A:A,0),0))+1))),"No match")

方法

(1) 从 B:D 中定位并提取匹配行。

(2) 如果 F2 小于该行的第一个元素,则设置结果等于第一个元素。

(3) 使用 MATCH 的非精确形式,找出小于或等于 F2 的最后一个值(即示例中的 4)。

(4) 如果等于 F2,则将其作为结果

(5) 如果不是,则给出下一个值作为结果(即示例中的 9)。

如果 F2 大于该行的最后一个元素,它将给出“不匹配”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多