基础不扎实者,慎入!会受打击的!
这个题A列是合并单元格,B列又是区间范围,这么看来还是有点难度的咯。其实你能看到这些,就已经完成一大半了。思路还是不难的:
首先将A列的合并单元格用数组的方式填充满,然后将B列的区间范围按短横线拆分为左右两列,这样就相当于有3列数组了。
接下来看E3单元格是否等于A列的数组;并且判断F3单元格是否大于等于B列左侧的数组,同时小于等于B列右侧的数组。这3个条件同时满足的就返回C列相应的值。
下面给出3种方法:
=LOOKUP(,0/((F3>=IMREAL(B$2:B$17&"j"))*(F3<=-IMAGINARY(0&B$2:B$17&"j"))*(LOOKUP(ROW($2:$17),ROW($2:$17)/(A$2:A$17>0),A$2:A$17)=E3)),C$2:C$17)
LOOKUP(ROW($2:$17),ROW($2:$17)/(A$2:A$17>0),A$2:A$17)这部分用来填充A列的合并单元格,返回的结果为{14;14;14;14;20;20;20;20;20;20;20;20;20;27;30;40}。
对lookup填充合并单元格的用法不了解的小伙伴,可以看《用lookup填充满合并单元格》这篇文章。
IMREAL(B$2:B$17&"j")这部分是用复数函数提取B列短横线左侧的数据,返回的结果为{2.5;3.01;3.51;4.76;1.5;3.26;3.46;3.66;3.96;4.11;4.41;4.61;4.76;0;0;0}。
同样地,-IMAGINARY(0&B$2:B$17&"j")这部分是提取B列短横线右侧的数据,返回的结果为{3;3.5;4.75;5.5;3.25;3.45;3.65;3.95;4.1;4.4;4.6;4.75;5.5;0;0;0}。
对复数函数不了解的小伙伴也可以看《对文本型的数字求和,我发现了一个新函数》这篇文章。
把这3个条件相乘,同时满足的返回1,否则返回0。最后用lookup查找到满足条件的,并返回C列的值。
在G3单元格输入下面的公式,下拉填充。
=LOOKUP(,0/((MMULT(SIGN(IMREAL(IMDIV(0&B$2:B$17&"j",{1,"-j"}))-F3),{1;1})^2<=1)*(LOOKUP(ROW($2:$17),ROW($2:$17)/(A$2:A$17>0),A$2:A$17)=E3)),C$2:C$17)
LOOKUP(ROW($2:$17),ROW($2:$17)/(A$2:A$17>0),A$2:A$17)这部分还是不变的,用来填充A列的合并单元格。
IMREAL(IMDIV(0&B$2:B$17&"j",{1,"-j"}))这部分将B列的区间拆分为一个多行2列的数组,然后再对其处理。后续处理的方法我也说不清了,感兴趣的自己研究一下公式的,主要用到mmult。
第1种方法是将B列拆分为单独的2列,现在是拆分为1个多行2列的数组,难度肯定是提高了。但是思路还是一样的,只是处理的方法有所不同。最后还是用lookup查找符合条件的,并返回C列的值。
=LOOKUP(,-FILTERXML("<a>0"&F3&"</a>",T(IF(1,"a[.>="&SUBSTITUTE(B$2:B$17,"-","][.<=")&"0]")))/(LOOKUP(ROW($2:$17),ROW($2:$17)/(A$2:A$17>0),A$2:A$17)=E3),C$2:C$17)
此公式用的是filterxml,也是从海鲜老师那里学来的套路。这里就当我练习一下了,而且由于B列正好是小数,我还取巧了下。如果是整数,公式会出错。
https://pan.baidu.com/s/17NUlekgE4e-MqiaYlP9Kyg