B2输入数组公式(用Shift+Ctrl+Enter输入):
=IF(AND(COUNTIF(A$1:A2,1),A2>1,COUNTIF(INDIRECT("A"&ROW()&":A"&MIN(IF(A2:A$1000=1,ROW(A2:A$1000),1000))),">1")=1),COUNTIF(INDIRECT("A"&MAX(IF(A$1:A2=1,ROW(A$1:A2),0))&":A"&MIN(IF(A2:A$1000=1,ROW(A2:A$1000),1000))),">1"),"")
下拉复制
看来还有点复杂,其实复杂的公式是由简单的公式合成的,下面我描述一下这个公式的形成过程:
在C2输入公式:
=COUNTIF(A$1:A2,1)
用来计算从A列第一个单元格起到A列本行单元格共有几个是1
在D2输入数组公式(用Shift+Ctrl+Enter输入):
=MAX(IF(A$1:A2=1,ROW(A$1:A2),0))
用来计算从A列第一个单元格起到A列本行单元格中取值为1的单元格的行号的最大值
在E2输入数组公式(用Shift+Ctrl+Enter输入):
=MIN(IF(A2:A$1000=1,ROW(A2:A$1000),1000))
用来计算从A列本行单元格到A1000中取值为1的单元格的行号和1000之间的最小值,此处假定你的A列数据不超过1000行,如若不然可设置更大的数。
在F2输入公式:
=COUNTIF(INDIRECT("A"&ROW()&":A"&E2),">1")
用来计算从A列本行单元格到其后第一次出现1的单元格(若不存在就到A1000)之间有几个取值大于1的单元格
在G2输入公式:
=IF(AND(C2,A2>1,F2=1),COUNTIF(INDIRECT("A"&D2&":A"&E2),">1"),"")
决定在什么情况下显示A列两个1之间取值大于1的单元格个数,即所求的。
选定C2:G2下拉,在G列就得到所求的结果了。
B2的公式是在G2的公式中依次代人F2、E2、D2、C2的公式后得到。
B3输入数组公式:
=IF(AND(COUNTIF(A4:A$1000,">1")=0,A3),COUNTIF(OFFSET(A$2,MAX(IF(A$2:A3=1,ROW(A$2:A3)))-1,):A3,">1"),IF(COUNTIF(A$2:A3,1),IF((INDEX(A:A,MIN(IF(A4:A$1000,ROW(A4:A$1000))))=1)*(A3>1),COUNTIF(OFFSET(A$2,MAX(IF(A$2:A3=1,ROW(A$2:A3)))-1,):A3,">1"),""),""))
将公式往下复制。
因为要判断的条件太多,一时间想不到更简单的方法。
b2=IF(COUNTIF(A$1:A1,1),IF(COUNTIF(A2:A100,">1")=1,COUNTIF(OFFSET(A$1,LOOKUP(1,0/(A$1:A1=1),ROW(A$1:A1)),ROW()-LOOKUP(1,0/(A$1:A1=1),ROW(A$1:A1))),">1"),IF(COUNTIF(OFFSET(A2,,,MATCH(1,A2:A100,0)),">1")=1,COUNTIF(OFFSET(A$1,LOOKUP(1,0/(A$1:A1=1),ROW(A$1:A1)),ROW()-LOOKUP(1,0/(A$1:A1=1),ROW(A$1:A1))),">1"),"")),""),下拉,要想简单必须加辅助列,把问题作为内容(邮件主题一定要包含“excel”,本人以此为依据辨别非垃圾邮件,以免误删)、excel样表文件(请特别注意:要03版的(如果是03以后的,把文件“另存为”一下,类型框可以选择03的),把现状和目标效果表示出来)作为附件发来看下 yqch134@163.com
需要辅助列列完成
比如:
E2=SMALL(IF($A$1:$A$120=1,ROW($A$1:$A$120),""),ROW(A1))
数组下拉
F2=COUNTIF(INDIRECT("A"&E2&":"&"A"&E3),">1")
下拉
再简单那也是复杂的