“分割”定界字符串,保留空白条目


10

我正在尝试使用Google表格(新版本)中的SPLITJOIN函数来处理某些数据,但由于SPLIT未保留空白条目,我遇到了问题。

数据源的设置基本上是这样的:

   |  A    B    C    D
-----------------------
1  |  q    5    r    2
2  |  s         t    4
3  |  u    8    v
4  |  w    3    x    6

(此数据集中的空白条目表示“无度量”,与的度量不同0

A和列上C,通过使用以下公式可获得所需的结果:

=SPLIT(JOIN("~",A1:A4,C1:C4),"~")

如预期的那样,将产生一行q s u w r t v x,每个行都在其自己的单元格中。

但是,此方法不适用于列BDJOIN发挥预期功能,输出如下:

5~~8~3~2~4~~6

表演SPLIT上输出,然而,导致了一个问题:我留下了5 8 3 2 4 6,没有之间的空白细胞58之间或46,这意味着对被分解(如sv应与空单元格,而是wx做的)。问题似乎在于,它SPLIT被解释~~为单个定界符,而不是被解释为两个定界符,并且两个定界符之间没有空条目。

有谁知道在这种情况下如何保留空白条目?

所需的输出看起来像这样

q  s  u  w  r  t  v  x
5     8  3  2  4     6

这些空白字段中的空格会解决此问题吗?
ale

键入“”确实会导致保留空白条目(感谢@AlE。!),但是最好还是采用技术解决方案,因为手动在所有这些条目中键入“”既非常耗时,又很麻烦​​。容易出错。
LiberalArtist 2014年

电子表格公式不是我的强项。也许可以IF()将空字段自动转换为空格。
ale

1
更新:@AlE。的想法确实让我立即完成了计算,方法是使用=ARRAYFORMULA(IF(ISBLANK(B1:B4)," ",B1:B4))来创建空白列中带有“”的虚拟列集,然后将其用于SPLITJOIN。不过,仍然希望有人能有一个更优雅的解决方案:这给我的文档增加了很多额外的东西,随着更多的度量被添加到数据集中,它仍然需要我在几个不同的地方更新行号。(感谢AI E.至少让我现在才
整理

Answers:


3

请尝试以下解决方案。

=ARRAYFORMULA(TRIM(SPLIT(JOIN(" ,", A1:A4,C1:C4), ",")))

解释

您已经向我们展示了该SPLIT函数将忽略空单元格,因此我选择此字符串作为定界符:" ,"。该JOIN函数的中间结果如下所示:
在此处输入图片说明

我为SPLIT函数选择定界符为:","。该SPLIT函数的中间结果如下所示:
在此处输入图片说明

但是,现在,我们必须处理增加的空白。因此,我使用该TRIM函数删除了所有尾随或前导空格(与组合ARRAYFORMULA)。比较LEN每个中间结果的值。

结果

在此处输入图片说明

我为您创建了一个示例文件:SPLIT以保留空白单元格


2

请尝试以下解决方案。

function myJoin() { 
  var output = []; 
  for(var i = 0, iLen = arguments.length; i < iLen; i++) {
    for(var r = 0, rLen = arguments[i].length; r < rLen; r++) {
      output.push(arguments[i][r][0]);
    }    
  }
  return [output];
}

用法

在此处输入图片说明

根据需要向函数添加尽可能多的范围,它们将被处理。将此小脚本添加到电子表格的脚本编辑器中(工具>脚本编辑器;按保存按钮)。

我为您创建了一个示例文件:SPLIT以保留空白单元格


2

简短答案

下面的公式返回所需的结果。

=Transpose({A1:B4;C1:D4})

扩展答案

该答案的重点是提供一种获得所需结果的方法,而不是讨论如何使所选方法起作用。

XY问题

OP希望获得X并认为Y应该返回该结果。这种方法是有问题的,因为Y有一些警告。这可能是市长的问题,因为OP询问如何使Y起作用而不是要求获得X的方法,但是它并没有那么大,因为它提供了上下文和所需的结果。

从最终用户的角度来看,Google表格可以以非常简单的方式处理多值结果。另一方面,它允许使用特殊的符号来允许最终用户定义数组。

上述功能可以在不使用SPLIT()和JOIN()函数且没有固有的警告的情况下获得预期的结果。

公式说明

{A1:B4;C1:D4}

这是由两个2 X 4阵列/范围组成的2 X 8阵列。;假设电子表格的小数点分隔符是点(.),则使用分号()。如果小数点分隔符是逗号,请用反斜杠(\)代替。

=Transpose({A1:B4;C1:D4})

将2 X 8数组转换为8 X 2数组。

此方法的优点之一是,它不需要对空白单元格进行特殊处理。其他优点是,它的配方非常紧凑,很容易适应。

参考文献


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.