在单元格中编写公式,有些函数或比较复杂的表达式,要反复调用,这种情况下,可以把这部分定义为一个名称,在公式中用一个名称代替长长的表达式,缩短公式的长度。 如下面的公式,使用了名称x。 =IF(ROW(1:1)>COUNT(x),"",INDEX(品名,SMALL(x,ROW(1:1))-13)) 因为x=IF(件数,IF(MATCH(品名,品名,)=ROW(品名)-13,ROW(品名))) 如果不使用名称x,则公式为: =IF(ROW(1:1)>COUNT(IF(件数,IF(MATCH(品名,品名,)=ROW(品名)-13,ROW(品名)))),"",INDEX(品名,SMALL(IF(件数,IF(MATCH(品名,品名,)=ROW(品名)-13,ROW(品名))),ROW(1:1))-13)) (数组公式) 其中品名与件数也是名称,是对工作表区域的引用,如果不使用该名称,也可在公式中直接使用单元格地址。 使用名称不仅仅是为了缩短公式的长度,公式中的“品名”、“件数”是对工作表区域的动态引用,把这个功能从公式中分离出来,使公式具有通用性: x=IF(件数,IF(MATCH(品名,品名,)=ROW(品名)-13,ROW(品名))) 无论引用的区域如何变化,公式保持不变,不会因为区域变了,而影响公式的使用。 动态引用要根据实际情况而定。本例中定义一个“品名”,区域从B14开始,向下至A列出现“合计:”为止,公式为: =装箱!$B$14:INDEX(装箱!$B:$B,MATCH("合计:",装箱!$A:$A)-1) 其中MATCH("合计:",装箱!$A:$A)-1是“合计:”的前一行。关于B14:index(B:B,n)的引用方式,见本帖89楼的解释。 本例中,品名引用的区域实际是B14:B45,“件数”是根据品名的变化而变化,OFFSET(品名,,1)表示品名的右一列,起始行与行数与品名相同。 关于定义名称,可在论坛上搜索一下,好帖子不少,如: hxhgxy:定义名称的妙处 筛选不重复值的方法不少,“Match+Row”形式是其中的一个经典用法: x=IF(件数,IF(MATCH(品名,品名,)=ROW(品名)-13,ROW(品名))) 本帖7楼有一个链接,可看看。 |