如何查找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) ) ) ) }
诀窍是Min
和Max
忽略逻辑值,所以我省略了If
的第三个参数
更新2
这个数组公式是@JohnBustos答案的一个简化版本(我还不确定他为什么使用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))