以下是引用gvntw在2005-6-18 0:09:00的发言:
给几个:
第二个方法中心公式也可以改为:
LOOKUP(,0/(COUNTIF(E$4:E4,C$5:C$17)=0),C$5:C$17)
第一解法的match+countif和第二法Frequency和Lookup都用得好
第二个方法中心公式改为:LOOKUP(,0/(COUNTIF(E$4:E4,C$5:C$17)=0),C$5:C$17)会出错
建议改为LOOKUP(1,0/(COUNTIF(E$4:E4,C$5:C$17)=0),C$5:C$17)
——apolloh
看懂了gvntw版主的第一法,不禁拍案叫绝。在所有的近30个方案中,相当多的是应用Eraser的经典解法的思路,用countif的确是创新。进行了如下试验:
①将公式中C$5:C$17全部改为纯粹的绝对引用$C$5:$C$17,能加强通用性,拷贝到G列照样可以。改后的公式为:
{=IF(ROW()-ROW(D$4)>SUM(1/COUNTIF($C$5:$C$17,$C$5:$C$17)),"",INDEX($C$5:$C$17,MATCH(TRUE,COUNTIF(D$4:D4,$C$5:$C$17)=0,)))}
②从实用的角度看,最后出现#N/A也是可以容忍的。故将前面的判断删除,应该能减少内存的占用,公式大为简化。
③公式的进一步简化。这一段MATCH(TRUE,COUNTIF(D$4:D4,$C$5:$C$17)=0,)可以改为MATCH(0,COUNTIF(D$4:D4,$C$5:$C$17),)。
④将条件区域增加两行,第18行为空,第19行为CD。公式改为:{=INDEX($C$5:$C$19,MATCH(0,COUNTIF(G$4:G4,$C$5:$C$19),))}。结果倒数第二行出现了一个不需要的0。gvntw版主说加一些条件判断能解决这一问题,尚未去看。 |