答案1
经过多次努力,我终于找到了一种可行的方法,尽管它使用了两个工作列(在使用工作表之前显然会被隐藏)。
我使用 Excel 2007 进行了测试,当或返回0
空白单元格时,它会显示而不是空白单元格:我可以使用条件格式删除这些,但我保留了它们,以免掩盖公式的工作方式:-index()
indirect()
我使用了你的测试数据,因此复制下来的公式D5
是:
=INDEX($A$5:$B$8,MOD(ROW()-ROW($A$5),ROWS($A$5:$B$8))+1,INT((ROW()-ROW($A$5))/ROWS($A$5:$B$8))+1)
现在将ColumnD
用作工作列,并F
创建另一个工作列,其中F5
包含:
=MATCH("*",$D$5:$D$12,0)+ROW()-1
并抄录自F6
:
=MATCH("*",INDIRECT(ADDRESS(F5+1,4,1)&":$D$12"),0)+F5
此处的要点如下:
MATCH()
当第三个参数为零(无序)时,可以使用通配符。"*"
匹配任何内容,但是不是返回空白单元格0
。INDEX()
最后H5
抄下来的是:
=IFERROR(INDIRECT("$D"&F5),"")
这里IFERROR()
用于捕获最后找到的条目之后的#N/A
列中的条目。F
隐藏工作列后,您将获得想要的内容:-
请注意,为了防止实时列序列中断,工作列可以位于主工作表区域之外(例如Y
和Z
)或位于单独的工作表上,尽管后者会通过工作表引用使公式更加复杂。
另外,可能只使用一个工作列,但公式的复杂性会大大增加,从而使得支持非常困难。
还要注意,您的公式可能被视为不必要地复杂,例如ROW($A$201)
始终为 201 且ROWS($A$101:$F$200)
始终为 100;在这两种情况下,都是因为使用了绝对寻址 -ROW()
并且ROWS()
在复制使用相对寻址的单元格时变得有用。