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

4
我使用过的大多数电子表格软件都有一个“文本到列”功能,它可以使用几个条件(分隔符、字符数等)将单个列拆分成多个列。我想要反向进行这个操作。
我知道可以使用公式创建第三列,并在两个单元格之间使用分隔符连接它们的值,但这种方法看起来很笨拙。
为什么没有内置此功能?还是说我找不到它的位置?

哪个版本的Excel? - ashleedawg
任何版本。我目前使用的是Libreoffice calc 5.1.1.3。在工作中,我使用Excel,但我不确定实际版本。 - Lee Blake
2个回答

7

有内置功能可以让你将多个单元格合并为一个,并在每个值之间添加分隔符。

假设你想要使用,号将单元格A1A5合并在一起。


Excel 2016

=TEXTJOIN(",",TRUE,A1:A5)

旧版 Excel

您可以轻松地进行无分隔符的合并:

=CONCAT(A1:A5)

相当于concat的是&文本运算符,您可以这样使用:

=A1 & A2 & A3 & A4 & A5

要获得与 CONCAT 相同的结果,可以使用 GROUP_CONCAT。要添加逗号分隔符:

=A1 & "," & A2 & "," & A3 & "," & A4 & "," & A5

替代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

第一个参数delim是放置在每个值之间的分隔符,可以是一个或多个字符,甚至是特殊字符,如CHAR(10)表示换行符(它将显示在启用“自动换行”的单元格中)。
第二个参数ignoreEmpty可以为FALSE,这样您就可以在结果中包含空单元格,并在它们之间使用分隔符,或者为TRUE,以跳过空单元格。(显然,如果指定的范围没有空单元格,则无论选择什么选项都无所谓。)
第三个参数是一系列单元格。如果指定了多行或多列,则公式将从右到左读取,然后从上到下读取。
使用我们的示例时,您可以像这样使用它:
=TxtJoin(",",TRUE,A1:A5)

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

1
我从未使用过LibreOffice,所以我不知道这些示例中的功能是否相同。(你知道作为开发人员学生,*你可以免费获得Office 365*及其他好处吗?这不是试用版本;完全来自微软的免费版本。) - ashleedawg
非常抱歉,我知道公式中可以使用这些函数。所谓的内置函数是指软件自动执行的函数,类似于内置的文本分列功能。 - Lee Blake
你的意思是什么?“由软件自动化”?也许在任何人再花费更多时间之前,你应该给出一些关于你拥有和需要的例子。 - ashleedawg
在电子表格软件中,内置了文本分列功能(在菜单中)。就像我在问题中特别提到的那样,我知道可以使用公式来实现相同的结果。我也可以在单元格内使用公式来实现“文本分列”,但是Excel、Calc等都内置了此功能。为什么它们没有内置反向操作的功能呢? - Lee Blake

0

这在LibreOffice 5.4.3.2中有效。如果在您的版本中无法工作,您可能需要下载并安装更新版本。

=TEXTJOIN(",";;A1:A5)

通过内置函数,我指的是由软件自动化的函数,类似于内置的分列文本功能。
我没有看到这样的功能。因为电子表格函数可以完美地实现所需功能。

我也不知道 - 我在使用Excel的函数时遇到了一些麻烦,因为它们没有像我想象的那样自动化... 我一遍又一遍地运行 CLEAN()FIXED(),但是家务活仍然没有完成。我使用 DOLLARS() 也没有更多的好运。这是虚假广告。 - ashleedawg
Jim,电子表格函数完美地执行“文本转列”操作,但是这个功能已经内置了,为什么不反过来呢? - Lee Blake

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接