sumif的功能是很常用的,在我用来记账的google sheet里面也经常用到,比如说在另外一个页签里统计上一个页签中所有H列值为“食”的所有行对应的“B”列费用的总和,就可以得到acct_book这个页签里所有“食”方面的开支总和:
=sumif(acct_book!H:H,"食",acct_book!B:B)
然而这个记法有个问题,比如我在acct_book这个页签里记的是全年的记录,而我的“食”总和是要按月统计的话,之前用的土方法就是比如当1月份的帐记完了,发现占据了2-130行的记录,那么1月份“食”方面的消费就可以这么统计:
=sumif(acct_book!H2:H130,"食",acct_book!B2:B130)
也就是说,写死了需要统计的行数。这样可以实现分月统计,但是方法比较死,如果回头要补增加1月份的记录倒不用担心,因为插入新行的动作会自动同步到公式里,也就是我如果在acct_book页签的2-130行之间插入一行的话,这个公式会自动变成:
=sumif(acct_book!H2:H131,"食",acct_book!B2:B131)
这样虽然可以用,但仍然不灵活,我只能等每个月结束之后看记录到了哪行,才能开始为下个月的统计公式输入范围。于是研究能不能基于日期列A做判断,查询google sheets的文档之后发现是可以的:
=sumif(acct_book!A:A,"<="&DATE(2014,2,1),acct_book!B:B)
sumif函数里支持基于日期的运算,语法如上,但是问题又来了,我需要的if条件参数不止一个啊,至少有开始日期、结束日期、类型三个条件,这样sumif就不够用了,需要sumifs,sumifs支持多重条件,跟sumif一个显著的区别是结果域调整到了最前面,后面接着的参数是条件域1,值1,条件域2,值2,...的形式。经过调试,理论写法如下:
=SUMIFS(acct_book!B:B,acct_book!H:H,"=食",acct_book!A:A,">="&DATE(2014,1,1),acct_book!A:A,"<"&DATE(2014,2,1))
为什么说是理论写法呢,因为首先,sumifs函数在现有版本的google spreadsheets里面不被支持,必须把自己的google docs打开成试用新版本的模式,而且即使打开之后,所有现有的文档也还是旧格式的,只有新建的文档才是新格式,在右下角会有个new google sheets的标识,在这样的文档里才可以用sumifs函数。
另外一点,中文或字符串的匹配判断在new google sheets里的支持也不理想,上面写法里的“=食”无法实现,而如果是英文的"=N"就OK,这一点还没有研究出来要怎么解决。
Leave a Reply