你这个最下面开始的起始位置,怎么确定呢?
先假定最下面第一个显示的数由两列中最底下的大于零的那个数的位置决定吧。
为突破2003公式嵌套不超过7层的限制和减少公式累赘,在E1位置定义三个名称如下:
MaxB=MAX(IF($B$1:$B$100>0,ROW($B$1:$B$100),0)) 返回B列不为零的最大行号
MaxC=MAX(IF($C$1:$C$100>0,ROW($C$1:$C$100),0)) 返回C列不为零的最大行号
ValBC=IF(E2>0,0,INDEX(B:B,LARGE(IF(B$1:B$100>0,ROW(B$1:B$100),0),COUNTIF(E2:E$100,">0")+1))) 返回每个EF列每个单元格的正确值
E1公式:
=IF(ROW()>MAX(MaxB,MaxC)+1,"",IF(OR(ROW()=MAX(MaxB,MaxC)+1,COUNTIF(B$1:B$100,">0")=COUNTIF(E2:E$100,">0")),0,IF(ROW()=MAX(MaxB,MaxC),IF(MaxB>MaxC,INDEX(B:B,MaxB),0),ValBC)))
F1公式:
=IF(ROW()>MAX(MaxB,MaxC)+1,"",IF(OR(ROW()=MAX(MaxB,MaxC)+1,COUNTIF(C$1:C$100,">0")=COUNTIF(F2:F$100,">0")),0,IF(ROW()=MAX(MaxB,MaxC),IF(MaxC>MaxB,INDEX(C:C,MaxC),0),ValBC)))
以上E1F1都是数组公式,Ctrl+Shift+Enter三键结束,然后两个单元格同时下拉填充,目前的填充范围是到99行,你可以下拉到99行并任意修改BC列数据验证
效果如图:
附件可参考
公式:
=IF(ISERROR(INDEX(B$2:B$25,SMALL(IF(($B$2:$B$25<>0)+($C$2:$C$25<>0),ROW($1:$24),9^9),ROW(A1)))),"",INDEX(B$2:B$25,SMALL(IF(($B$2:$B$25<>0)+($C$2:$C$25<>0),ROW($1:$24),9^9),ROW(A1))))
数组公式,按CTRL+SHIFT+回车,右拉一列,下拉。
我来给万大神加油打气O(∩_∩)O~