大神们,求帮讲解下这个excel的函数,真心看不懂

=IF((-LOOKUP(,-LEFT($D3,ROW($1:$2)))<MONTH($B$2))*(-LOOKUP(,-LEFT($D3,ROW($1:$2)))>=MONTH($A$2)),DAY(EOMONTH(DATE(DAY($A$2),-LOOKUP(,-LEFT($D3,ROW($1:$2))),1),0))-(-LOOKUP(,-LEFT($D3,ROW($1:$2)))=MONTH($A$2))*DAY($A$2),IF(-LOOKUP(,-LEFT($D3,ROW($1:$2)))=MONTH($B$2),DAY($B$2),""))

    这个公式是嵌套了2层的IF函数,D3单元格=if({(条件1) and (条件2)},结果1,if(条件3,结果2结果为空值))

    这里的条件1=-LOOKUP(,-LEFT($D3,ROW($1:$2)))<MONTH($B$2)//d3的月份数<B2结束日期的月份数; 其中-LOOKUP(,-LEFT($D3,ROW($1:$2)))就是截取D3中代表月份的数字1,函数效果等同于left(D3,len(D3)-1)*1;MONTH($B$2)就是返回B2的月份数12

    条件2=-LOOKUP(,-LEFT($D3,ROW($1:$2)))>=MONTH($A$2))//同理,d3的月份数大于或等于a2开工日期的月份数

    条件1 AND 条件2 //如果D3的月份数是介于开工月份和结束月份的话,那么下面将返回结果1

    结果1=DAY(EOMONTH(DATE(DAY($A$2),-LOOKUP(,-LEFT($D3,ROW($1:$2))),1),0))-(-LOOKUP(,-LEFT($D3,ROW($1:$2)))=MONTH($A$2))*DAY($A$2)//这段函数比较复杂,可以分成两小段,即:小段1的DAY(EOMONTH(DATE(DAY($A$2),-LOOKUP(,-LEFT($D3,ROW($1:$2))),1),0))和小段2的(-LOOKUP(,-LEFT($D3,ROW($1:$2)))=MONTH($A$2))*DAY($A$2),大结构是小段1-小段2,下面分析小段1

    小段1:DAY(EOMONTH(DATE(DAY($A$2),-LOOKUP(,-LEFT($D3,ROW($1:$2))),1),0))//最外层是个DAY函数,这一段函数的目的是返回一个1-31之间代表一个月中日期顺序的数字,其中DAY(a2)=10; -LOOKUP(,-LEFT($D3,ROW($1:$2)))上面讲过就是D3的月份值(1),那么小段1函数可简化为DAY(EOMONTH(DATE(10,1,1),0))其中date(10,1,1)是返回10-1-1这个日期的序列数,这个函数感觉是有问题的,第1参数10是代表年份数,而题目的意思理应为2012啊,可能应该为year($A$2),先不管,函数继续简化为DAY(EOMONTH("10-1-1"的序列数,0));这里EOMONTH("10-1-1"的序列数,0)的意思为返回10-1-1这个日期对应的当月月末的日期,值为10-1-31(1月大,31号为最后一天),然后DAY(10-1-31的序列值)的结果为31

    小段2:(-LOOKUP(,-LEFT($D3,ROW($1:$2)))=MONTH($A$2))*DAY($A$2)//简化下为:(1=5)*10 返回的是逻辑值0*数10,这段最终结果为0,从中可以看出只有5月份时,结果才能为10,

    第6小段减去第7小段组成的结果1的意思到这里应该很明了了,如果D列的月份数在5-12之间,那么返回的结果1都是各月的天数,除了5月份是31-10=21天。

    下面的if(条件3,结果2,结果为空值)就是针对D列月份数在小于开工月份5月和大于结束月份12月所作的判断,条件3不成立那么结果为空值或者说IF最终的计算数字等于0。

    第2个IF段=IF(-LOOKUP(,-LEFT($D3,ROW($1:$2)))=MONTH($B$2),DAY($B$2),"")//

    其中:条件3=-LOOKUP(,-LEFT($D3,ROW($1:$2)))=MONTH($B$2),简化下为1=12

    继续简化:=if(1=12,DAY($B$2),"") ,这里1=12返回的是逻辑值0,结果也为“”,从这里可以看出,day(B2)=7 ,只有月份数=12月才成立。

    好不容易把字码完了,希望你能够明白和采纳,不清楚的地方欢迎继续询问,总的来说这段函数编写的还行,阴差阳错的DATE函数那里虽然出错了,但是不影响结果。

追问

美女,最后这条函数我自己改的,哪里可以优化一下呀,求指教

这条函数基本实现了我的需求,只是想优化一下

温馨提示:答案为网友推荐,仅供参考