将多列堆叠为一列而不忽略空白单元格

Stack multiple columns into one without ignore blank cells

对于几列的堆叠和过滤空白单元格,@player0 告诉我按如下方式进行:

但我发现需要不忽略空白单元格,因为我要在四个不同的电子表格上使用脚本,每个电子表格都会将数据发送到列的第一个空白行, 因此可能会发生某些列的数据比其他列多的情况,并且由于我将在侧面的列中手动记录值,如果我更改位置,它将弄乱我手动记录的内容。

:

A B C D
E F G H
  J K L
  N    

预期结果:

A
B
C
D
E
F
G
H

J
K
L

N


这些空格是必需的,以便在列中记录新数据时,旧数据不会改变位置,保持在原来的位置。

可以吗?

Note: I have already looked in some places saying that if I do this, the spreadsheet would be immense because of the number of blank lines that it would take into account. I imagine that it would be necessary only the blank cells until the last line that has data at the moment, the rest would not be necessary.

But I was unable to adjust to make this possible.

  • 你想实现如下情况

    • 来自

      A B C D
      E F G H
        J K L
        N 
      
    • A
      B
      C
      D
      E
      F
      G
      H
      
      J
      K
      L
      
      N
      
  • 在上述情况下,您只想使用从 AN 的值。您不想在 N.

  • 的值之后包含空值

如果我的理解是正确的,这个答案怎么样?请将此视为几个可能的答案之一。

修改后的公式:

=TRANSPOSE(SPLIT(REGEXREPLACE(TEXTJOIN(",",FALSE,A1:D,"#"),",+#",","),",",,FALSE))
  1. 使用 TEXTJOIN() 加入 "A1:D" 的值。
  2. 使用 REGEXREPLACE().
  3. 删除最后一个字符后的空值
  4. 使用 SPLIT() 将值从字符串拆分为数组。
  5. 使用 TRANSPOSE() 转置数组。
结果:

参考文献:

如果我误解了您的问题而这不是您想要的结果,我深表歉意。

您可以像这样构建它:

=ARRAYFORMULA(ARRAY_CONSTRAIN(TRANSPOSE(SPLIT(QUERY(TRANSPOSE(QUERY(TRANSPOSE(
 IF(A:D="", CHAR(9), A:D)),,9^9)),,9^9), " ")), ROWS(A:A), 1))

我的解决方案太简单了,但你可以使用 =FLATTEN(A1:D)

是的,就这么简单。

显然,Google 从未记录过此 FLATTEN 函数,但它可以完美地满足您的需求和我的需求。

希望有人能找到它,即使它已经得到解答,我知道我永远需要它哈哈。