答案已发送,请评分 (水平有限,只好用定义名称一步步做,做的太复杂了,有时间现思考一下简化的办法) ================================ 1、返回姓名,倾力打造 皆因脑子中有了MMUT(),便有了以下的连环公式: data3=LOOKUP(SMALL(IF(MATCH(data1&data2,data1&data2,)=ROW(data1)-1,ROW(data1)-1),ROW(INDIRECT("1:"&SUM(N(MATCH(data1&data2,data1&data2,)=ROW(data1)-1))))),ROW(data1)-1,data1) 把姓名与奖券都相同的多余记录剔除,如第13条等记录,保留不重复的记录{1;2;3;4;5;6;7;8;9;10;11;12;14;15;16;17;20;21;22;23;25;29;30;32;34;35;37;38;39;40},返回这些记录对应的姓名。 mmult=MMULT(--(data3=LOOKUP(COLUMN(INDIRECT("c1:c"&ROWS(data3),)),ROW(INDIRECT("1:"&ROWS(data3))),data3)),ROW(INDIRECT("1:"&ROWS(data3)))^0) 根据名单data3计算重复次数,即得不同奖券的次数。 F2=IF(ROW(1:1)>SUM(--((mmult>1)*MATCH(data3,data3,)=ROW(INDIRECT("1:"&ROWS(data3))))),"",INDEX(data3,SMALL(IF((mmult>1)*MATCH(data3,data3,)=ROW(INDIRECT("1:"&ROWS(data3))),ROW(INDIRECT("1:"&ROWS(data3)))),ROW(1:1)))) 公式的核心部分是: F2=INDEX(data3,SMALL(IF((mmult>1)*MATCH(data3,data3,)=ROW(INDIRECT("1:"&ROWS(data3))),ROW(INDIRECT("1:"&ROWS(data3)))),ROW(1:1))) 蓝色部分是data3中得奖券大于1的不重复名单对应的记录号(见附件R:R),根据记录号,从data3中返回对应的姓名,完成了第一项任务。 mmult中的公式LOOKUP(COLUMN(INDIRECT("c1:c"&ROWS(data3),)),ROW(INDIRECT("1:"&ROWS(data3))),data3)可使用TRANSPOSE()简化: mmult=MMULT(--(data3=TRANSPOSE(data3),ROW(INDIRECT("1:"&ROWS(data3)))^0) 2、奖券内容,信手拈花 G2=INDEX($C:$C,SMALL(IF((data1=$F2)*MATCH(data1&data2,data1&data2,)=ROW(data1)-1,ROW(data1),65536),COLUMN(A1)))&"" 以data1=$F2为条件,提取C:C中不重复的记录,这是解决该问题的常规用法,封州大少在这方面一定没花多少脑筋。 =========================================== mmult中的公式LOOKUP(COLUMN(INDIRECT("c1:c"&ROWS(data3),)),ROW(INDIRECT("1:"&ROWS(data3))),data3)可使用TRANSPOSE()简化: mmult=MMULT(--(data3=TRANSPOSE(data3),ROW(INDIRECT("1:"&ROWS(data3)))^0) 狂晕,一直都想当然地认为TRANSPOSE只支持单元格区域,不会支持内存数组,想到过这个函数,但连试都懒得去试
[此贴子已经被作者于2007-3-21 16:04:32编辑过] |