孙凡丽
在图1中,假设A列为空调的完整型号数据,在D2单元格中输入公式“ ={IFERROR(INDEX($A$1:$A$10,SMALL(IF(MMULT(-ISERR(FIND(MID($C$2,COLUMN(A:Z),1),$A$1:$A$10)),ROW($A$1:$A$26)^0)=0,ROW($A$1:$A$10),COUNTA(A:A)+1),ROW(A1))),"/")}”。注意,输入完公式后需要按下“Ctrl+Shift+Enter”组合键(数组公式)。最外层的{}是按下该组合键后自动产生的,不能手输。以后只要在C2单元格中输入空调型号的部分信息,在D2单元格中就会引用所有与之相关的空调型号。该公式较为复杂,下面详解公式的计算过程。
通过MID和COLUMN函数将C2单元格中的信息分割为x个单个字符,x根据A列中空调型号的最长字符数确定,并将其对应为列字母。在本公式中,假设A列中的最长字符数为26个,对应的列字母为Z,即将C2单元格中的信息分割为26个字符,没有字符的部分使用空值凑齐(图2)。
使用FI N D函数将2 6个字符与A1: A10数据区域中的内容逐个比对,形成一个10 行2 6 列的矩阵。若字符存在于某个单元格中,就显示其在该单元格字符中的位置序号,不存在就显示“#VALUE!”,空值部分对比后显示“1”(图3)。
然后借助ISERR函数将上述矩阵中的数据转型,将位置序号和“1”转换为“FALSE”、“#VALUE!”转换为“TRUE”(图4)。
接着使用“-”减函数再次转型矩阵,将“FALSE”转换为“0”、“TRUE”转换为“-1”。此时可以发现,包含空调部分信息的那一行,转换后的结果全部为“0”(图5)。
使用MMULT 矩阵函数计算数组。数组1为图5 所示的10 行2 6 列的矩阵,数组2 为ROW($A$1:$A$26)^0,即26行1列中所有值为“1”的矩阵。计算结果是两个数组的乘积之和,为10行1列的数组(图6)。
使用I NDEX 、IF和SMALL函數将上述的计算结果数组按ROW(A$1:A$10)转换为10行1列的位置行号数组,结果为“0”就显示位置行号,非“0”则显示“11”。并在该数组中找出第k个最小位置行号,D2单元格中k为ROW(A1),值为1,即选出第1个最小的位置行号5。然后从A1:A10数据区域中根据位置行号5引用第1个包含空调部分信息的完整型号。
下拉D 2 单元格中的公式到D 3~D1 0 单元格,R OW( A1)会依次变为R O W ( A 2 ) 、ROW(A3)……,这样就会引用第2个、第3个……的完整型号了。最后会使用IFERROR函数将不符合的结果标记为“/ ”。