Arrayformula 对非空白单元格之间的空白单元格进行编号,从 0 到 n

Arrayformula to number blank cells between non-blank ones from 0 to n

我想检查一个 array/row,

  1. 忽略非空白单元格(设置为""),

  2. 从 0 到 n 对空单元格进行编号,

  3. 如果找到下一个非空白单元格,则将数字重置为 0。

  4. 停在最后一个单元格

所以,它看起来像这样:

        A       B
 0  APPLE   
 1              0
 2              1
 3  BANANA  
 4              0
 5              1
 6              2
 7  CHERRY  
 8  DURIAN  
 9              0
 10 EGG 

A是原来的,B是应用的函数。

=ARRAYFORMULA(IF(INDIRECT("A2:A"&MAX(IF(A:A<>"", ROW(A:A), )))="",
 MMULT(N(ROW(A2:A)>=TRANSPOSE(ROW(A2:A))), N(A2:A=""))-
 HLOOKUP(0, MMULT(N(ROW(A2:A)>TRANSPOSE(ROW(A2:A))), N(A2:A="")), MATCH(
 VLOOKUP(ROW(A2:A), IF(N(A2:A<>A1:A), ROW(A2:A), ), 1, 1),
 VLOOKUP(ROW(A2:A), IF(N(A2:A<>A1:A), ROW(A2:A), ), 1, 1), 0), 0)-1, ))

=ARRAYFORMULA(TEXT(ROW(A1:A11)-MATCH(ROW(A1:A11),IF(A1:A11<>"",ROW(A1:A11),),1)-1,"[<0];0"))
  • IF 将所有非空白行更改为其对应的行号 1,,,4,,,,...
  • MATCH 使用近似匹配 1,1,1,4,4,4,4,...
  • 获取所有先前的行号
  • 从上面的数组对应的行号中减去 1 -1,0,1,-1,0,1,2,3,...
  • TEXT 将所有负数更改为“”