在 Excel/Calc 中将文本反转为列

Lee*_*ake 2 string excel vba text-manipulation libreoffice-calc

我使用过的大多数电子表格软件都有一个文本到列的功能,可以使用多个条件(分隔符、字符数等)将单列拆分为多列。我想反过来这样做。

我知道我可以使用一个公式来创建第三列,其中两个单元格的值用它们之间的分隔符连接在一起,但这看起来很笨拙。

为什么这不是内置函数?还是有什么我看不到的地方?

ash*_*awg 5

有一些内置函数可以让您将多个单元格合并为一个单元格,每个单元格之间有一个分隔符。

比方说,你想加入的细胞A1,以A5,在每个值之间。


Excel 2016

=TEXTJOIN(",",TRUE,A1:A5)
Run Code Online (Sandbox Code Playgroud)

较旧的 Excel 版本

您可以在没有分隔符的情况下轻松组合:

=CONCAT(A1:A5)
Run Code Online (Sandbox Code Playgroud)

与 concat 等效的是&文本运算符,您可以像这样使用它:

=A1 & A2 & A3 & A4 & A5
Run Code Online (Sandbox Code Playgroud)

...与 . 的结果相同CONCAT。添加逗号分隔符:

=A1 & "," & A2 & "," & A3 & "," & A4 & "," & A5
Run Code Online (Sandbox Code Playgroud)

TEXTJOIN功能替换

更好的是,我们可以构建我们自己的 版本TEXTJOIN,我称之为TXTJOIN

Function TxtJoin(delim As String, ignoreEmpty As Boolean, rg As Range) As String
    Dim c As Range
    For Each c In rg
        If Not ignoreEmpty Or Not IsEmpty(c) Then TxtJoin = TxtJoin & delim & c
    Next c
    If TxtJoin <> "" Then TxtJoin = Mid(TxtJoin, Len(delim) + 1)
End Function
Run Code Online (Sandbox Code Playgroud)

第一个参数delim是放置在每个值之间的分隔符,可以是一个或多个字符,甚至可以是换行符之类的特殊字符CHAR(10)(将显示在启用了自动换行的单元格中。)

ignoreEmpty如果您希望结果中包含空白单元格,则第二个参数可以为 FALSE,每个单元格之间有一个分隔符,或者为 TRUE 以跳过空白单元格。(显然,如果指定的范围没有空白单元格,那么您选择什么选项都没有关系。)

第三个参数是单元格范围。如果指定了多个行或列,则公式将从右到左然后从上到下读取。

对于我们的示例,您可以像这样使用它:

=TxtJoin(",",TRUE,A1:A5)
Run Code Online (Sandbox Code Playgroud)

(这与 Excel 2016TEXTJOIN函数的用法相同。)