【百度不了的问题】不同时段促销价不同,如何快速查6月20日猪肉价?

编按:哈喽,大家好!如何根据日期和名称等多个条件查询相应时间范围或者时间段所对应的产品价格、数量呢?品名、编号等都需要精确查找,但不需要对日期进行精确查找,而是查找最接近或等于查找日期的某个时间段。赶紧看看下面的文章吧!


【问题说明】

小王负责策划公司商品的促销活动,需要根据商品特性和市场反应做一些非常有针对性的单品促销方案,这些年来仅促销的价格清单就有成百上千条。

最近公司领导让小王做一个针对以往活动价格的查询模板,要求输入商品名称和查询日期就能调取对应的执行价格,类似于下面的效果。

图中只是随便列举了一些数据,实际的数据量要更大。例如要查询商品2在2020年6月20日所执行的价格,就要在活动明细(A~D列)中找到商品2,再看看查询日期属于对应的哪一个方案,从而确定出6月20日的价格是600。

领导的需求小王算是搞明白了,但这要怎么实现呢?

小王陷入了沉思……

【思路分析】

很明显,这个问题属于多条件查找,条件1是品名,条件2是日期,要查找的结果是价格。但是有一个问题,品名是可以精确对应的,但日期不行,需要对应的是查找日期之前最近的一个日期。

例如商品2可能就有很多种方案,查找6月20日的价格,就要在商品2的方案中找到6月20日之前的,并且是最接近的那个日期,也就是6月14日开始执行的价格。如果6月20日作为条件,在对应的条件区域中正好存在的可能性很小。当然也可以将条件设置为小于等于查询日期,但是这样的话,就有可能存在多条记录,如何确保在小于查询日期的多条记录中匹配到的是最后一条呢?

“当查找区域中有多个满足条件的数据时,LOOKUP会与最后一条数据进行匹配,并得到结果区域中对应的数据。”利用这一特性,就可以解决按某个条件查找最新数据的问题。

【函数公式】

使用LOOKUP函数进行多条件查找的套路为:

=LOOKUP(1,0/((查找范围1=查找值1)*(查找范围2=查找值2)*……*(查找范围n=查找值n)),结果范围)

对于小王的这个问题来说,只需要两个条件,按照这个套路写出的公式是这样的:

=LOOKUP(1,0/(($A$2:$A$17=F2)*($C$2:$C$17<=G2)),$D$2:$D$17)

验证结果发现个别地方会得到错误值,如图所示。

错误的原因显而易见,查找的日期早于该商品的最早生效日期。

如何将这种错误值替换成文字性的说明呢?

这当然难不住小王了,只需要在LOOKUP函数的外面嵌套一个IFERROR函数就可以搞定,完善后的公式为:

=IFERROR(LOOKUP(1,0/(($A$2:$A$17=F5)*($C$2:$C$17<=G5)),$D$2:$D$17),"无此日期对应价格")

将错误值显示为“无此日期对应价格”,结果如图所示。

至此,小王完美的完成了领导交代的任务,获得了大家的一致好评。

但是小王心里清楚,通过这个问题还是发现了自己的基本功不够牢固,还需要好好的总结一下。

【心得小结】

在这个实例中,有下面几个很关键的问题需要着重强调。

1.遇到问题一定要冷静,明确问题的类型才能找到解决问题的突破口,小王能够准确的将这个问题定性为多条件查找,就是找准了解决问题的方向。

2.对于一些不太常用的函数以及一些函数的常用套路,或许不能应用自如,但是有印象很重要,这样在查找资料时就能很快的找到线索。

3.一些函数或公式的重要特点必须牢记,例如存在多个符合查找条件的结果时,VLOOKUP找到的是第一个,而LOOKUP找到的是最后一个。

4.多个函数的嵌套往往不是一蹴而就的,而是在不断测试的过程中逐步完善的,分析问题解决问题的过程也是一种很有效的学习方式。

5.关于LOOKUP函数的应用,如果只单纯套用公式模型是比较容易的,但是要真的搞明白这个函数的话,之前的相关教程还得好好再研究一番。

只有不断的修炼,不断的强大,才能无惧于未来遇到的一切问题。小王这样鼓励自己,充满信心的等待下一个新的挑战。


(0)

相关推荐