1、Excel根据导出的科目余额表补全完整科目名称的公式前段时间写的财务工作常用Excel公式集锦及解析(第一季)-Excel偷懒的技术-知乎专栏,有朋友说看不懂那些复杂的公式,比如根据导出的科目余额表,补全完整科目名称的公式:=IFNA(VLOOKUP(LEFT(A8,-LOOKUP(0,1-FIND(.,A8,ROW($1:$20),A$1:C7,3,)&-&B8,B8)现做一个详细解析:公式思路:我们观察科目代码的规律可以发现,所有明细科目的代码都是在上一级科目代码后顺序添加.01、.02.明细代码,也就是说前面的部分都与上一级相同。因而,我们只要截取前面相同部分的代码,然后
2、用vlookup查找引用上级科目的完整科目名称(C列),再添加上本级科目的名称即可(C列),比如:1122.01.020.09科目代码,要补全其科目名称,只需先截取出其上一级科目代码1122.01.020,然后使用Vlookup函数,查找引用上一级科目名称应收账款-重点客户-北京,然后补上-和本级科目名称北京华章公司即可。具体编制方法:那如何截取出1122.01.020.09科目代码的1122.01.020呢?如果明细科目代码有规律的话,比如都是两位,可以使用Left函数编制公式:=left(A8,len(A8)-3)来截取,但是由于明细科目代码有二位的,也有三位的,所以不能使用此公式,只能先
3、查找最后一个.的位置,然后根据其位置来截取上级科目代码。那如何查找最后一个.的位置呢?可以使用公式下面的公式来查找FIND(.,A8,ROW($1:$20)ROW($1:$20)会生成1到20的常量数组:1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20此公式的意思是:依次从A8单元格的第1位、第2位第20位开始查找.符号,查找到就返回其位置数,如果没有查找到,就会出错,返回#VALUE!。因而,此公式将生成一个由错误值及.所在位置组成的序列:5;5;5;5;5;8;8;8;12;12;12;12;#VALUE!;#VALUE!;#VALUE!
4、;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!从上面的序列可以看出,12就是1122.01.020.09代码中最后.的位置数,那如何从上面序列中取到这个值呢?它在序列中的顺序号并不固定,但有一点是确定的,就是除去错误值#VALUE!,它就是最后的值了。所以我们可以利用Lookup的特点来取到这个值。LOOKUP有三个特点:1、会忽略错误值2、要求查找对象按升序排列,并且按二分法来查找3、如果LOOKUP找不到与查找值相等的数,它会使用应查找区域中小于或等于查找值的最大值(注意:不是查找对象中的最大值)因而可以编制下面的公式:LOOKUP(0,1-FIND(.,
5、A2,ROW($1:$20)这个公式为什么能刚好取得最后一个非错误值呢?这是由于1-FIND(.,A2,ROW($1:$20)会生成下面的序列:-4;-4;-4;-4;-4;-7;-7;-7;-11;-11;-11;-11;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!忽略掉错误值,相当于-4;-4;-4;-4;-4;-7;-7;-7;-11;-11;-11;-11,根据二分法,LOOKUP先取最中间那个值(7)进行判断,7小于查找对象零值(0),由于LOOKUP要求按升序排列,所以它很傻很天真地认为右边的数比7大
6、,只有在右边才有可能找到0值,LOOKUP就会按二分法在右边继续查找零值。由于右边的数实际上都是小于零的,所以,LOOKUP会一直查找,直到查找到最后一个11,根据规则查找对象按升序排列,这个11它是最一个位置了,肯定就是最大值了,所以LOOKUP最终返回11。然后,我们再在公式前加个负号将其转换为正数,然后使用Left函数截止左边的11位代码:LEFT(A8,-LOOKUP(0,1-FIND(.,A8,ROW($1:$20)就可得到上级科目代码1122.01.020了,再使用VLOOKUP查找引用得到上级科目名称,公式:VLOOKUP(1122.01.020,A$1:C7,3,)&-
7、&B8也就是:VLOOKUP(LEFT(A8,-LOOKUP(0,1-FIND(.,A8,ROW($1:$20),A$1:C7,3,)&-&B8大家要注意本公式所在的单元格是C8,公式的查找范围是A$1:C7,这是混合引用,查找范围的起始行是固定的(A$1),查找范围的最末行不是固定的(C7),会随着下拉填充公式时,自动变为C8、C9、C10.,也就是随着公式下拉填充,会自动将前面已经补充完整的会计科目名称包含进来,这个借用前面公式计算结果的公式的编制思路值得大家学习借鉴。如果没查找到,那就是新科目,新科目直接引用其科目名称即可=IFNA(VLOOKUP(1122.01
8、.020,A$1:C7,3,)&-&B8,B8)即最终公式:=IFNA(VLOOKUP(LEFT(A8,-LOOKUP(0,1-FIND(.,A8,ROW($1:$20),A$1:C7,3,)&-&B8,B8)总结:本公式有二点值得仔细揣摸学习:1、找到最后一个特定字符的公式:-LOOKUP(0,1-FIND(.,A8,ROW($1:$20)2、借用前面公式的计算结果。小编寄语:会计学是一个细节致命的学科,以前总是觉得只要大概知道意思就可以了,但这样是很难达到学习要求的。因为它是一门技术很强的课程,主要阐述会计核算的基本业务方法。诚然,困难不能否认,但只要有了正确的学习方法和积极的学习态度,最后加上勤奋,那样必然会赢来成功的曙光。天道酬勤嘛!