财富小虫 发表于 2021-10-19 00:02:00

查询匹配某个区间的数据行,并返回相关数据


如图,通过I列和J列在左侧表格进行匹配查询,如果匹配,则返回相关数据,比如返回A列的数据。
K列是我自己用公式输出的结果,对于设备高度大于1U的显示不完美,我希望输出L列的结果。
希望各位大神帮帮我!

冰雪大世界一 发表于 2021-10-22 06:46:12

K2 单元格数组公式:
=INDEX(A:A,MIN(IF((表1[机柜号]=[@机柜号])*(表1[机柜落位-下沿]<=[@U数])*(表1[机柜落位-上沿]>=[@U数]),ROW(表1[机柜号]),9999)))&""

五棵树的森林 发表于 2021-11-3 16:24:41

大神!果然是大神!感谢你提供的解决方案。不过我参照这个公式应用到我实际在用的表格,发现取不到值。。。百思不得其解

肥肆 发表于 2021-11-14 12:21:59

另外,我发现=INDEX(A:A,这里A:A为什么不能改成 表1[设备用途] ,还有后面的 ROW(表1[机柜号]),9999,没看懂什么意思。

几十里林阿陌 发表于 2021-11-16 21:27:12

K2 单元格数组公式:
=INDEX(A:A,MIN(IF((表1[机柜号]=[@机柜号])*(表1[机柜落位-下沿]<=[@U数])*(表1[机柜落位-上沿]>=[@U数]),ROW(表1[机柜号]),9999)))&""
其中,(表1[机柜号]=[@机柜号]) * (表1[机柜落位-下沿]<=[@U数]) * (表1[机柜落位-上沿]>=[@U数])
是用来判断机柜号是否相同,U数是否在指字区间。
其中,IF(条件,ROW(表1[机柜号]),9999)
当机柜号相同且在指定区间时,就给出相应的行号,用 ROW(表1[机柜号]) 表示;如果不满足,就给 9999
9999 有什么用?INDEX 从 A 列取值的时候,如果没有找到,就取 A 列的第9999行,因为这一行是没有数据的,用INDEX取值的结果是 0 ,这时候在外面加一个 &"" 就可以显示空值。
为什么 A:A 不能改成超级表的区域?其实也可以。之所以用 A:A ,是因为后面的条件判断返回的结果是对应的 行号 ,比如第一个结果是在第 2 行,如果将 A:A 改为超级表的区域,那么第一个结果是在第 1 行,这样是匹配不上的。如果一定要用超级表区域,可以在 ROW 函数后面减 1 ,这样就是 第 1 行对第 1 行了:=INDEX(A:A,MIN(IF((表1[机柜号]=[@机柜号])*(表1[机柜落位-下沿]<=[@U数])*(表1[机柜落位-上沿]>=[@U数]),ROW(表1[机柜号]-1),9999)))&""
至于为什么在你的实际数据中不能返回正确结果,那就要看实际情况了,只要理解了这个公式,做相应的调整即可

记得笑 发表于 2021-12-5 13:49:54

后面经过摸索,可以取到值了,是因为我实际数据中,机柜落位-上沿是用公式计算出来的,[机柜落位-上沿]=[机柜落位-下沿]+-1,由于部分机柜落位-下沿数据不统一,导致计算结果错误,进而导致机柜面板图公式取值报错。经过调整现在可以了。
但是,现在有一个问题是,在我实际数据表中,用了这个公式后,非常耗CPU、内存,导致整个表的操作很慢。我想应该是公式哪里还有待优化,提升公式执行效率。

半座山 发表于 2021-12-19 09:13:55

最终效果如下图所示(

):







http://127.0.0.1/data/attachment/forum/202202/08/163017maxbemau69b9a4ni.png
页: [1]
查看完整版本: 查询匹配某个区间的数据行,并返回相关数据