返回目录:excel表格制作
如果C4:C10范围内能查到到R(一个或多个),则C3显示R
=IF(COUNTIF(C4:C10,"R")>0,"R","")
其他类推
C20=INDEX(C:C,MAX(($A$2:$A$9=A20)*($B$2:$B$9=MAX(IF(($A$2:$A$9=A20)*$B$2:$B$9<=B20,($A$2:$A$9=A20)*$B$2:$B$9,0)))*ROW($A$2:$A$9)))数组公式向下复制
=LOOKUP(1,0/((A$2:A$10=A20)*(B$2:B$10<=B20)),C$2:C$10)这个公式比我的简洁。
LOOKUP(M,区域1,区域2)
这个公式的意思是在查区域1中查找M,如果找到这个值M,就返回区域2中与M在区域1中相同位置的值(两个区域的只能包含一行或者7a64e59b9ee7ad94362一列,大小必须相同)。
如果区域1中没有M,则返回小于等于M的最大值所对应的区域2的值。
LOOKUP(1,0/((A$2:A$10=A20)*(B$2:B$10<=B20)),C$2:C$10)
在0/((A$2:A$10=A20)*(B$2:B$10<=B20))中查找1,返回C$2:C$10中对应位置的值。
0/((A$2:A$10=A20)*(B$2:B$10<=B20))的含义:
A$2:A$10=A20,在A$2:A$10区域中找=A20的单元格,找到就返回TRUE(也就是1),找不到就返回FALSE(也就是0),查找的结果形成8个参数的数组{TRUE;TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;FALSE}
也就是{1;1;1;0;0;0;0;0}
同理B$2:B$10<=B20的结果是{TRUE;FALSE;FALSE;TRUE;TRUE;FALSE;TRUE;TRUE}
也就是{1;0;0;1;1;0;1;1}
((A$2:A$10=A20)*(B$2:B$10<=B20))就是上述两个数组对应值相乘形成一个新的数组
{1;0;0;0;0;0;0;0}(1*1=1,1*0=0,0*1=0)
0/((A$2:A$10=A20)*(B$2:B$10<=B20))就是用0去除以这个新形成的数组的每一个值组成新的数组。结果是{0;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!}
只有第一个正确,其余7个错误。
在这个数组(区域1)中查找1,只能返回小于或等于1的0(位置为第一个),
那么LOOKUP(1,0/((A$2:A$10=A20)*(B$2:B$10<=B20)),C$2:C$10)的结果就是返回C$2:C$10(区域2)中的第一个值c。
没有行号,类似这copy样的公百式试试
=SUMPRODUCT(($C$2:$C$10=$C15)*(D$2:D$10>=--MID($B15,2,FIND(",",$B15)-2))*(D$2:D$10<=--MID(SUBSTITUTE($B15,"]",""),FIND(",",$B15)+1,3))*(E$2:E$10))
(和]代表度的开和闭区间知含义忘掉了,你自己调道一下>=和<=