在行中找到第一个填充的单元格,然后将空白计数到下一个填充的单元格并拉入 header

find first populated cell in row then count blanks to next populated cell and pull in header

我如何找到包含数字的行中的第一个单元格,然后计算空白单元格直到下一个数字,如果空白单元格的计数大于 36,请从 header 中拉入空白单元格后的填充单元格。
在下一列中,我将需要一个公式,该公式从 36 个空白单元格之后的填充单元格开始,并再次执行与上面相同的操作,即计算空白单元格,如果大于 36,则拉入 header。 我在想它可能是偏移函数,但不确定如何将它组合在一起 - 或者它是否需要 VBA?

这两个都是数组公式**:

A59中,用于确定该行的预期returns数:

=COUNT(1/(MMULT(INDEX(MODE.MULT(IF(ISNUMBER(J59:DC59),{1;1}*COLUMN(J59:DC59))),N(IF(1,ROW(INDEX(A:A,1):INDEX(A:A,COUNT(MODE.MULT(IF(ISNUMBER(J59:DC59),{1;1}*COLUMN(J59:DC59))))-1))+{0,1}))),{-1;1})-1>36))

向下复制以给出第 60、61 等行的类似计数

然后,在B59

=IF(COLUMNS($A:A)>$A59,"",INDEX(:,SMALL(IF(MMULT(INDEX(MODE.MULT(IF(ISNUMBER($J59:$DC59),{1;1}*COLUMN($J59:$DC59))),N(IF(1,ROW(INDEX(A:A,1):INDEX(A:A,COUNT(MODE.MULT(IF(ISNUMBER($J59:$DC59),{1;1}*COLUMN($J59:$DC59))))-1))+{0,1}))),{-1;1})-1>36,MODE.MULT(IF(ISNUMBER($J59:$DC59),IF(COLUMN($J59:$DC59)>MIN(IF(ISNUMBER($J59:$DC59),COLUMN($J59:$DC59))),{1;1}*COLUMN($J59:$DC59))))),COLUMNS($A:A))))

向下和横向复制(如果需要,最多到第 I 列)。

通过对其进行定制以最多容纳两个 returns,可能可以使此设置更加高效。然而,最后,我认为值得推导一个适用于任意数量 returns 的通用解决方案(这里的范围 - J59:DC59 - 可以根据需要扩展)。

此致

**数组公式的输入方式与 'standard' 公式不同。您不是只按 ENTER,而是先按住 CTRL 和 SHIFT,然后再按 ENTER。如果操作正确,您会注意到 Excel 在公式周围放置了大括号 {}(但不要尝试自己手动插入)。

好的,我将放入辅助版本作为替代。

这里简单介绍一下 sheet 1:-

和 sheet 2 只是计算所提到的空间并放入一个标志 (-1) 以显示何时达到一定数量的空间:-

所以在 Sheet2!D2 中,如果 Sheet1 中相应的单元格为空,则以下公式将向左侧单元格中的值加一。如果Sheet1对应的单元格不为空,空格数达到一定数量(本例为4)则插入-1。

=IF(Sheet1!D2="",MAX(C2,0)+1,IF(C2>3,-1,0))

Sheet1!B2中的公式找到Sheet2中对应行的第一个-1,索引第1行对应的表头:-

=INDEX($A:$P,SMALL(IF(Sheet2!$D2:$P2<0,COLUMN($D2:$P2)),1))

Sheet1!C2 中的公式找到第二个 -1 :这可以通过使用 SMALL 函数中的当前列来找到第 n 个 -1 来变得更通用。这是一个数组公式,必须用CtrlShiftEnter

输入
=INDEX($A:$P,SMALL(IF(Sheet2!$D2:$P2<0,COLUMN($D2:$P2)),2))

需要对少于 2 个空单元格序列的情况进行错误处理。