昨天的那个公式能否再帮我讲述详细些,万分感谢
感觉会是个很长的回答,字字认真揣摩,意在容易理解,烦请同样认真阅读。
我们的公式是这样的:
=IF(ROW(A2)>$P$4,"",INDEX(ycjl[[故障原因]:[故障时间/H]],MATCH(查询!$B$1&$O$4,ycjl[辅助列],0)+ROW(A1),1))
对于这个公式,包含的隐藏信息还是蛮多的,即使您补充了截图,也仍然没有截取准确全面的数据信息,所以,我们只能猜测其中某些自定义区域的范围了。猜测如下,如有偏离请及时指出:
1、 ycjl[[故障原因]:[故障时间/H]],之前我们的猜测是自定义区域,通过截图,我们纠正一下,其实是工作表异常记录中的E:I列区域,由于该区域套用了特定的表格格式,所以在被引用的时候会改编成ycjl[[故障原因]:[故障时间/H]],而不是通常的容易理解和识别的异常记录! E:I。
2、 同样的ycjl[辅助列]受套用表格格式的影响替代了异常记录! K:K这个通俗的引用描述。顺便我们说一下辅助列K列的由来:K2中公式猜测为A2&B2或者ycjl[故障日期]&[影响工序],结果是44105一烧,其中的44105是日期的数值(这个搜索excel日期和时间规则了解一下,这里不多说,篇幅不可控)
我们便于为了便于描述,约定以上两个区域分别为区域1和区域2.
MATCH(查询!$B$1&$O$4,ycjl[辅助列],0)的意思是在区域2中查找查询!$B$1&$O$4(即B1和O1文本的合并结果:44135一烧)所在的位置,结果返回的数字代表所查数据在区域2中的第几个,假如44135一烧 在第10行,结果便是10。请记住这个数字。
INDEX函数目的是从区域1中引用match所查找到的相应位置(就是这个10)的对应数据异常记录! E10:I10的第一列的数据(这里公式的作者有些复杂化了,因为index本身就具有一维数据引用功能的,INDEX(ycjl[[故障原因]:[故障时间/H]],MATCH(查询!$B$1&$O$4,ycjl[辅助列],0)+ROW(A1),1)是二维引用,可以用INDEX(ycjl[[故障原因],MATCH(查询!$B$1&$O$4,ycjl[辅助列],0)+ROW(A1))代替的,这样会更容易理解一些)。Index+match是常用的数据查询引用公式。+ROW(A1)是调节引用行数的,会随着公式下拉一次变成 +1 +2 +3 、、、、实现罗列引用第11行、第12行、第13行、、、、、数据。
外层嵌套的=IF(ROW(A2)>$P$4,"",意在限制显示,即行号大于设定值P4时,不进行任何查找,防止引用大量无用数据,猜测P4公式是一个countifs函数计算了异常记录工作表中10月31日一烧的个数。
到此,我们看出公式就是具体化的index+match查找引用
=index(想要获取的数据的区域,match(查找值,查找值所在区域,0))
希望有所帮助!