如何在表格中查找近似值对应的行列位置
如何在表格中查找近似值对应的行列位置
嘿,我完全懂你这5小时绞尽脑汁的痛苦,别着急,咱们把问题拆解开一步步解决!你想要的就是从左侧的C3:E10数据区域里,找到和右侧数值(比如你说的1.34)最接近的那个值,然后拿到它在这个区域里的相对行列位置(比如你手动标注的“列1,行5”),对吧?
你之前写的公式=arrayformula(ABS(H3-C3:E10)=MIN(ABS(C3:E10-H3)))其实方向是对的——它生成了一个布尔矩阵,把最接近值的位置标记成了TRUE,但还需要把这个标记转换成咱们要的行列信息。
给你几个直接能用的公式,轻松得到结果:
获取相对行号(比如例子里的“行5”)
=MATCH(TRUE,INDEX(ABS(C3:E10-H3)=MIN(ABS(C3:E10-H3)),,),0)
获取相对列号(比如例子里的“列1”)
=MATCH(TRUE,INDEX(ABS(C3:E10-H3)=MIN(ABS(C3:E10-H3)),1,),0)
直接组合成“列X,行X”的格式
如果你想一步到位得到像“列1,行5”这样的结果,用这个公式就行:
="列"&MATCH(TRUE,INDEX(ABS(C3:E10-H3)=MIN(ABS(C3:E10-H3)),1,),0)&",行"&MATCH(TRUE,INDEX(ABS(C3:E10-H3)=MIN(ABS(C3:E10-H3)),,),0)
简单解释下公式里的关键部分:
MIN(ABS(C3:E10-H3)):先算出右侧数值和左侧所有值的绝对差值,取最小的那个——这就是“最接近”的判断标准。ABS(C3:E10-H3)=MIN(...):生成一个和左侧表格一样大的矩阵,只有最接近值的位置会显示TRUE,其他都是FALSE。INDEX(...):把刚才的布尔矩阵转换成一维数组,方便MATCH函数找到TRUE的位置,也就是相对的行/列号。MATCH(TRUE,...):定位到TRUE的位置,直接输出它在左侧区域里的行或列序号。
要是遇到有多个值和目标数值的差值一样(也就是多个最接近值),这个公式会返回第一个出现的位置,要是需要处理这种多结果的情况,咱们可以再调整公式~
备注:内容来源于stack exchange,提问作者Gustavo Barbosa
相关产品推荐
相关产品推荐

