【问题标题】:Find lowest or equal value on unsorted data在未排序的数据上查找最小值或相等值
【发布时间】:2015-09-25 09:57:16
【问题描述】:

我正在尝试查找包含小于或等于查找值的数字的范围的第一个单元格。范围是未排序的,它必须保持这种状态。

MATCH 函数是我的首选,但它不适用于未排序的数据。 例如,对于查找值 3,以下情况应返回 4 的结果(因为 2 是等于或小于 3 的第一个数字,它是数组中的第 4 个数字)。这个例子中没有完全匹配,MATCHmatch_type=-1returns 3。我需要找到一个解决方案来返回'4'。

UNSORTED_MATCH of LOOKUP_Value=3 in array:
8
6
99
2
11
17
18
5

提前感谢您的任何想法。

【问题讨论】:

    标签: excel excel-formula lookup


    【解决方案1】:

    使用您在 C1 中寻找的值,这似乎返回了正确的行号。

    对于列 A 中的数字与目标查找数字之间的最小非负差,公式为,

    =MATCH(C1-MIN(INDEX(C1-(A$1:A$8)+(C1-(A$1:A$8)<0)*1E+199,,)),A:A, 0)
    

    对于小于或等于目标查找数的第一个数,公式为,

    =MIN(INDEX(ROW($1:$9)+(A$1:A$9>C1)*1E+99, , ))
    

    【讨论】:

    • 如果查找值为7,这个也失败了,数组是:15 8 4 99 2 11 17 18 5;它返回9,但应该是3(因为第三个数字是小于查找值的第一个数字
    • 我刚刚注意到问题标题已被编辑:我不是在寻找最低值 - 我正在寻找低于查找值的 第一个值价值
    • 显然我第一次没有理解这个要求,只是巧合地达到了预期。第二种方法请参见我上面的编辑。
    • 是的,这似乎可以解决问题,但是您能解释一下INDEX 函数的参数是什么吗?我对+和1E+99不熟悉;我明白了,但我不明白细节
    • 1E99 是一个非常大的数字(1 后跟 99 个零)。 A$1:A$9&gt;C1 是真还是假。 false 为零,true 为 1。查看每个行号,并将 A 列大于 C1 的任何行添加到它。任何等于或小于的值都会添加 0×1E99。可以肯定地说,添加了 1E99 的任何内容都不会是任何内容中的最小值,因此您会留下 A 列中的值等于或小于 C1 的行号。其中MIN 将是第一个。
    猜你喜欢
    • 2015-05-21
    • 1970-01-01
    • 1970-01-01
    • 2015-05-25
    • 2019-10-20
    • 2022-08-23
    • 2015-07-21
    • 2013-01-10
    • 2021-08-12
    相关资源
    最近更新 更多