如何查找Excel中二维表中最接近的值?

在Excel 2010中,我设置了一个填充了百分比错误的二维表格。 这些百分比是基于用户input计算的,所以这些值根据用户要求的值而变化。

我想要做的是能够在表格中find最接近于零的单元格的位置,并返回该数据点的行和列以供进一步计算。 有没有办法做到这一点,而不使用macros?

在此先感谢您的帮助。

编辑:百分比错误是非负面的,并可能在表中出现不止一次。

对于绝对值最接近0的单元格(例如-1和1)来说,这样做太不可靠了。

这个数组公式将得到最接近0的绝对值:

 { = MIN( ABS( Table1 ) ) } 

其中Table1是表或范围的名称。 如果表的值为-1和1,则返回1。

然后,这些数组公式得到最接近0的值的最大行和最大列

 { = MAX( ROW(Table1) * (ABS(Table1) = MIN(ABS(Table1))) ) } { = MAX( COLUMN(Table1) * (ABS(Table1) = MIN(ABS(Table1))) ) } 

更新

此数组公式适用于您的镜像数据:

 { = ADDRESS( MIN( IF( ABS(Table1) = MIN(ABS(Table1)), ROW(Table1) ) ), MAX( IF( ABS(Table1) = MIN(ABS(Table1)), COLUMN(Table1) ) ) ) } 

如果没有负值,您可以移除ABS零件:

 { = ADDRESS( MIN( IF(Table1 = MIN(Table1), ROW(Table1) ) ), MAX( IF(Table1 = MIN(Table1), COLUMN(Table1) ) ) ) } 

诀窍是MinMax忽略逻辑值,所以我省略了If的第三个参数


更新2

这个数组公式是@JohnBus​​tos答案的一个简化版本(我还不确定他为什么使用SMALL而不是MIN ):

 { = MIN( IF(Table1=MIN(Table1), ROW(Table1)*1000 +COLUMN(Table1)) ) } 

这将返回数字如3005 ,其中3是行,5是列,所以地址是:

 { = ADDRESS( MIN( IF(Table1=MIN(Table1), ROW(Table1)) ), MOD(MIN( IF(Table1=MIN(Table1), ROW(Table1)*10^5 +COLUMN(Table1)) ), 10^5) ) } 

由于Range.Find方法,VBA版本会简单得多:

 Function findMin(r As Range) As Range Set findMin = r.Find(WorksheetFunction.Min(r)) End Function 

具有示例用途:

 =CELL("address", findMin(Table1)) =ROW(findMin(Table1)) =COLUMN(findMin(Table1)) 

我很好奇别人是怎么做的,但是举个例子,假设你的数据是在A1:G7范围内设置的。 你可以通过下面的数组函数(在input公式后按CTRL + SHIFT + ENTER)来做到这一点,如下所示:

 =ADDRESS(MIN(IF(ABS(A1:G7)=SMALL(ABS(A1:G7),1),ROW(A1:G7)),MIN(IF(ABS(A1:G7)=SMALL(ABS(A1:G7),1),COLUMN(A1:G7)))) 

请注意,如果你想单独的行和列值,他们也在这个公式:

 Row: = MIN(IF(ABS(A1:G7)=SMALL(ABS(A1:G7),1),ROW(A1:G7))) Col: = MIN(IF(ABS(A1:G7)=SMALL(ABS(A1:G7),1),COLUMN(A1:G7))) 

希望这可以帮助。


更新:

给出的评论(我完全错过了),如果值出现不止一次,你可以得到不同的行和列值的结果,我做了一个新的公式,会给你你想要的结果。

试试这个:

 =CELL("address",INDIRECT(TEXT(SMALL(IF(ABS(B2:GS201)=SMALL(ABS(B2:GS201),1),ROW(B2:GS201)*10^4+COLUMN(B2:GS201)),1), "R0000C0000"),0))