=IF(D7=1,M8,VLOOKUP(D7,D8:O46,10,)-VLOOKUP(D7,D8:O46,4,)+VLO

问题描述:

=IF(D7=1,M8,VLOOKUP(D7,D8:O46,10,)-VLOOKUP(D7,D8:O46,4,)+VLOOKUP(D7,D8:O46,7,))这个函数表示什么?
我在应用于结转上月数据时,如果当月为2月,2月没有入库的话就不结转上月数据,出现如图所示,请问这怎么办?
1个回答 分类:综合 2014-10-28

问题解答:

我来补答
公式的含义是:如果D7=1,取M8的值,否则计算后面的表达式.
VLOOKUP(D7,D8:O46,10)是在B8:O46这个单元格区域,从D8:D46查找D7并取同一行向右数第10列的值,因为VLOOKUP函数第四个参数省略,它会查找小于等于D7的最大值.后两个意思相同,只是分别取向右数第4、7列的值.
该函数返回#N/A是因为D7小于D8:D46中的最小值(0或FALSE的错误会更加明显).M7、M8也应该如此.
图中的D1、D2显然丢失了引用地址.
修复此表格最便捷的办法就是你把文件发给我了.275954170@qq.com.
再问: 收到了吗,给你发过去了,请看一下
再答: 不好意思,有些晚了。 我把M7的公式改成 =IF(D7=1,M8,INDEX(M8:M45,SUMPRODUCT((D8:D450)))) 意思是,如果D7等于1,M7取M8的值,否则在M8:M45中(D46是文字,查找此行其它列没有意义)取第n行的值,n由SUMPRODUCT求出。SUMPRODUCT计算在D8:D45中同时小于D7和大于0(C8:C45为空时D8:D45返回0)的数量,也就是登账的条目数,因为总是顺序记录,所以这个数也是上月的最后一条记录。保留IF(D7=1,是因为小于1的数是0,0在INDEX中会返回一个数组,而公式和索引区域不在同一行,如果使它返回需要的值也要使用其它函数。 这个公式不但可以避免任一月份没有出入库发生时返回错误值,还可以在同一个月任意记录出入库数据。 同理,O7改为 =IF(D7=1,O8,INDEX(O8:O45,SUMPRODUCT((D8:D450)))) 为避免N7出现#DIV/0!错误,公式由 =IF(D7=1,N8,O7/M7) 改为 =IF(D7=1,N8,IF(M7=0,"/",O7/M7)) 如果你的EXCEL是07版,还可以 =IF(D7=1,N8,IFERROR(O7/M7,"/")) 这和文件格式本身无关。 "/"也可以采用其它表达式,但此工作表已设置成不显示零值,所以诸如0、逻辑值,"-"只是保留其值但不显示出来。 你发来的文件没有#REF!错误,但我能肯定图例中的是由于首页P列的某个单元格而不是单元格的内容被删除了,甚至可以推断出这种物料的理想库存数是被剪切过来的。
 
 
展开全文阅读
剩余:2000