【问题标题】:finding minimum value between 1 value and a column查找 1 值和列之间的最小值
【发布时间】:2013-11-22 18:46:12
【问题描述】:

我试图找到某个常数和一列值之间的最小值。理想情况下,我想返回行号,以便我可以引用不同的列。

通常使用代码(例如 Matlab)就像

一样简单
[minVal, minIdx] = min(abs(constant - arrayOfNumbers))

然后只需使用返回的索引来引用正确的列。

如何在excel中做到这一点?

常数为 4184。

1  Col A  Col B 
2  5040   -0.29
3  4840   -0.41
4  4620   -0.55
5  4450   -0.67
6  4200   -0.86
7  4050   -1
8  3970   -1.11
9  3880   -1.25
10 3850   -1.3

第 6 行的最小绝对差为 abs(4184 - 4200) = 16。因此我想引用 B(6) 以返回 -0.86

【问题讨论】:

    标签: excel minimum


    【解决方案1】:

    假设您要测试的值 (4184) 在单元格 D1 中。

    第一步,求最小绝对差:把这个公式说成单元格E1作为数组公式(按Ctrl-Alt-Enter接受)。

    =MIN(IFERROR(ABS(A:A-$D$1),""))
    

    然后找到这个值所在的行:把这个公式放在单元格F1中作为一个普通公式

    =IFERROR(MATCH(D1-E1,A:A,0),MATCH(D1+E1,A:A,0))
    

    注意 1:IFERROR 函数需要 Excel 2007 或更高版本

    注意 2:如果您不想使用中间公式,可以将它们组合起来(作为数组公式),但这确实重复了 MIN(...) 部分

    =IFERROR(MATCH(D1-MIN(IFERROR(ABS(A:A-$D$1),"")),A:A,0),MATCH(D1+MIN(IFERROR(ABS(A:A-$D$1),"")),A:A,0))
    

    【讨论】:

    • 为了清楚起见,使用OP示例中给出的名称重写数组公式以返回最小值的行号:=IFERROR(MATCH(constant-MIN(IFERROR(ABS(arrayOfNumbers-constant),"")),arrayOfNumbers,0),MATCH(constant+MIN(IFERROR(ABS(arrayOfNumbers-constant),"")),arrayOfNumbers,0))
    【解决方案2】:

    您需要第 # 行,还是只使用生成的 -0.86?如果你只想要 -0.86,你可以使用 vlookup 函数,因为它看起来你的数据已经排序了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-28
      • 2015-11-12
      • 2015-01-16
      • 2022-06-16
      • 2017-05-08
      • 2016-06-17
      • 2021-06-04
      • 1970-01-01
      相关资源
      最近更新 更多