我有下表:
我在B4列中有以下公式
B4
=IF(A4="","",MATCH(TRUE,INDEX(ISNUMBER(A5:A1872),,),0))
该公式计算列A中数字1之间的空白行的数量。我想要的公式是一个把我的数字像在Column C即一步下来。B12中的4应该在B16中。B16中的2应该在B18中,依此类推。谁来帮帮忙我有Excel 2021吗?我在Excel 2021中没有DROP()函数
Column C
B12
B16
B18
DROP()
vyu0f0g11#
基于@DavidLeal提供的第一个答案,尽管有些简化:
=LET( ζ,A1:A12, ξ,ROW(ζ), IF(ζ=1,1+DROP(FREQUENCY(IF(ζ="",ξ),IF(ζ<>"",ξ,0)),-1),"") )
ijxebb2r2#
不如这样:
=LET(a,A4:A1872, b,ROW(a)*a, m,MMULT(--(TOROW(b)<b)*(TOROW(b)<>0),SEQUENCE(ROWS(b),,1,0)), x,TOCOL(IF(ISERR(1/b),NA(),b),3), IF(b,b-INDEX(x,m),""))
这将从当前行中提取先前找到的值的行号。)这意味着第一个值将显示0。)
8hhllhi23#
假设您正在计算空白行的数量加一,就像在示例中一样。无论起始值是什么,以下都可以工作,它可以是1或空白。如果空白单元格是由公式创建的,也可以使用此方法,例如:=""。此答案假设 * 根据问题中列出的标记 ( 公式1*),没有Excel版本限制。
1
=""
=LET(A, A1:A15, seq, SEQUENCE(ROWS(A)), freq, DROP(FREQUENCY(IF(A="",seq), IF(A<>"",seq)),-1), f,FILTER(seq,A<>""), MAP(seq,LAMBDA(s,XLOOKUP(s,f,freq+1,""))))
这里的另一种方法是使用SCAN来计数每组中的空白,然后调用MAP来找到每组的最大计数,即如果计数(c)为零,则取前一个元素。处理第一个1在开始时的情况,在这种情况下INDEX(c,-1)产生错误,因此IFERROR返回1(* 公式2*):
SCAN
MAP
c
INDEX(c,-1)
IFERROR
=LET(A,A1:A15, seq,SEQUENCE(ROWS(A)), c,SCAN(0,A,LAMBDA(ac,x,IF(x="",ac+1,0))), MAP(seq,LAMBDA(s,IF(INDEX(c,s,1)=0,IFERROR(INDEX(c,IF(s=1,0,s)-1)+1,1),""))))
下面是 * 公式1* 的输出:
FREQUENCY
freq
seq
XLOOKUP
f
3条答案
按热度按时间vyu0f0g11#
基于@DavidLeal提供的第一个答案,尽管有些简化:
ijxebb2r2#
不如这样:
这将从当前行中提取先前找到的值的行号。)这意味着第一个值将显示0。)
8hhllhi23#
假设您正在计算空白行的数量加一,就像在示例中一样。无论起始值是什么,以下都可以工作,它可以是
1
或空白。如果空白单元格是由公式创建的,也可以使用此方法,例如:=""
。此答案假设 * 根据问题中列出的标记 ( 公式1*),没有Excel版本限制。这里的另一种方法是使用
SCAN
来计数每组中的空白,然后调用MAP
来找到每组的最大计数,即如果计数(c
)为零,则取前一个元素。处理第一个1
在开始时的情况,在这种情况下INDEX(c,-1)
产生错误,因此IFERROR
返回1
(* 公式2*):下面是 * 公式1* 的输出:
FREQUENCY
进行计数。想法取自这里:Occurrence in an excel serie,来自@JosWoolley的回答和对他的信任。我们删除freq
的最后一个值,因为它是最后一个bin(开放间隔)。我们将有与输入中的1
一样多的频率值。现在使用MAP
遍历索引位置(seq
),并使用XLOOKUP
查找特定的索引位置(f
,1
的索引位置),并返回相应的频率(freq
)加上1
。如果没有找到索引位置,则意味着它是一个空行,因此我们返回一个空字符串。