在Excel中将文本拆分为多行

在Excel中将文本拆分为多行

YouTube video

大多数时候,Excel 中的数据按列排列,更常见的是将单元格中的文本拆分为多列而不是行。

但在某些情况下,您可能希望在 Excel 中将文本拆分为多行。

例如,如果单个单元格中有多个名称,并且您想要分割这些名称并将它们放在不同行的列中。

或者您可能在单元格中有一个地址,并且您想要拆分该地址的不同部分并将它们放在不同的行中。

在本文中,我将向您展示一些简单的公式和方法,您可以使用这些公式和方法将单元格中的文本快速拆分为多行(取决于分隔符)

推荐:Windows 10/11中Microsoft Paint键盘快捷键

使用 TEXTSPLIT 函数将文本拆分为行

如果您使用的是 Excel for Microsoft 365(Windows 或 Mac)或 Excel for the Web,则可以使用新的 文本分割函数

TEXTSPLIT 函数根据指定的分隔符将单元格中的文本拆分为行或列。

它的工作原理与 Excel 中的“文本到列”功能类似,但由于这是一个公式,因此效果更好。

让我向您展示一些可以使用此功能的示例。

根据一个分隔符进行拆分

下面是一个示例,我在单元格 A2 中有一个地址,我想将地址的不同部分(即名称、街道名称、城市和州/密码)拆分为列中的不同行。

单元格 A2 中文本到行的地址

在本例中,地址的这些不同部分由逗号分隔,我将使用逗号作为分隔符来进行分割。

以下是将单元格中的内容拆分为单独行的公式:

=TEXTSPLIT(A2,,", ")
在Excel中将文本拆分为多行

上述 TEXTSPLIT 公式采用三个参数:

  • 文本 – 这是我使用包含我要拆分的文本的单元格 (A2) 的单元格引用的第一个参数
  • 列分隔符 – 这是第二个参数,您应该在其中指定分隔符,根据该分隔符在单独的列中进行分割。 在本例中,由于我希望将文本拆分为行而不是列,因此我将此参数留空。
  • [row_delimiter] – 这是第三个参数,我需要指定分隔符,文本将根据该分隔符分割成单独的行。 由于我希望在每个逗号之后分割地址,因此我使用“,”作为分隔符。 请注意,您的分隔符需要用双引号引起来。

笔记:TEXTSPLIT 函数还有另外三个可选参数,在本示例中我们不需要这些参数。 你可以 在这里阅读有关此功能的更多信息。

另外,在上面的示例中,我使用“,”作为分隔符(即逗号后跟空格字符)。

这是因为地址的每个部分后面都跟有一个逗号,然后在下一部分开始之前有一个空格字符。 如果您的数据只有逗号而没有空格字符,您可以相应地更改分隔符。

或者,您可以使用以下可以处理所有类型情况的公式:

=TRIM(TEXTSPLIT(A2,,","))
TRIM 和 TEXTSPLIT 函数用于文本到行

TRIM 函数可确保任何单元格中没有前导空格字符。

Also read: How to Split Cells in Excel (separate into multiple columns)

基于两个或多个分隔符进行拆分

TEXTSPLIT 还可以处理您想要根据两个或多个分隔符拆分单元格中的文本的情况。

下面是这个示例,其中单元格 A2 中有一个地址,并且有两个分隔符(破折号分隔名称和地址,逗号分隔地址的所有不同元素)

带有两个分隔符的地址

以下是一个公式,在将单元格中的文本拆分为行时会考虑两个分隔符:

=TRIM(TEXTSPLIT(A2,,{",","-"}))
Textsplit 函数使用两个分隔符将文本转换为行

在上面的示例中,我在 TEXTSPLIT 函数中有以下参数:

  • 文本 – 这是我要拆分的单元格 (A2) 的单元格引用
  • 列分隔符 – 这是列分隔符,但由于我希望将文本拆分为行而不是列,因此该参数留空。
  • [row_delimiter] – 这是第三个参数,我需要指定分隔符,文本将根据该分隔符分割成单独的行。 由于我希望根据两个分隔符(破折号和逗号)分割地址,因此我使用了数组 {“,”,”-“}。 这告诉公式检查花括号中指定的所有分隔符。

根据换行符分割

您可能希望将单元格的内容拆分为行的另一种情况是单元格中有换行符,并且您希望将每一行放在列中的单独单元格中。

下面,我有一个示例,其中单元格 A2 中有地址,并且地址中有多个换行符。

同一单元格中带有换行符的地址

我不想在同一单元格中获取多行,而是想拆分该地址的内容,以便将每一行放在一列的单独行中。

这可以再次使用 TEXTSPLIT 函数快速完成,我需要以某种方式使用换行符作为分隔符。

我该怎么做?

通过使用返回换行符的公式,然后可以在 TEXTSPLIT 函数中将其用作分隔符。

下面是使用换行符分割地址的公式:

=TEXTSPLIT(A2,,CHAR(10))
Textsplit 函数使用行空间作为分隔符将文本转换为行

在上面的公式中,我使用 CHAR(10) 作为行分隔符,其中 CHAR(10) 返回换行符。

Also read: How to Split Multiple Lines in a Cell into a Separate Columns

将多个单元格拆分为一列中的行

TEXTSPLIT 函数是救星的一个特殊情况是,当您在一列中的多行中有数据,并且您想要拆分每个单元格但仍在一列中获得结果时,

下面是我的意思的一个例子。

当您有多个单元格数据时,用于将文本拆分为行的数据集

我在 A 列的三个单元格中都有名称,这些名称以逗号分隔,并且我想拆分所有这些名称,以便在同一列的不同单元格中获得单独的名称(如下所示)。

我想如果没有 TEXTSPLIT,这将是一个复杂的公式,但是有了它,这并不难。

这是执行此操作的公式:

=TRIM(TEXTSPLIT(TEXTJOIN(",",,A2:A4),,","))
TEXTJOIN 和 TEXTSPLIT 函数可按分隔符分割文本并合并在一列中

此公式中的技巧是使用 TEXTJOIn 函数组合不同单元格中的所有名称,以便我们得到一个由逗号分隔的名称数组。

在文本连接函数中,第一个参数是组合所有单元格内容时使用的分隔符(在本例中为逗号)。

TEXTJOIN 函数的结果是:

“斯蒂芬、詹姆斯、安娜、理查德、海伦、托比、克里斯、马克、道格”

然后在 TEXTSPLIT 函数中使用该数组,然后使用逗号作为分隔符对其进行分割。

警告:请记住,TEXTSPLIT 是 Excel for Microsoft 365 中的新函数,不会与其他函数向后兼容。 因此,如果您在工作簿中使用它并将其发送给使用旧版本 Excel 的人员,他们将看到错误。

Also read: Separate Text and Numbers in Excel

使用文本到列和转置将文本拆分为行

如果您不使用 Excel for Microsoft 365,您将无法访问 TEXTSPLIT 函数。

因此,您必须依靠内置的“文本到列”功能首先将文本拆分为列,然后转置结果。

让我向您展示它是如何工作的。

下面是一个示例,我在单元格 A2 中有一个地址,我想将其拆分(使用逗号作为分隔符)并在单独的行中获取结果。

单元格 A2 中文本到行的地址

第一步是使用“文本到列”将其拆分为列。 这可以通过以下步骤完成:

  1. 选择包含数据的单元格(或单元格范围)
  2. 单击数据选项卡
单击数据选项卡
  1. 单击“文本到列”图标(位于“数据工具”组中)
单击功能区中的“文本到列”选项
  1. 在“将文本转换为分栏向导”中,选择“分隔”选项,然后单击“下一步”。
选择分隔选项并单击下一步
  1. 选择“逗号”作为分隔符(取消选中所有其他选项),然后单击“下一步”。
选择, 作为分隔符,然后单击下一步
  1. 选择您想要结果的“目标”单元格,然后单击“完成”。 在本例中,我将选择 A4 作为目标单元格。
选择目标单元格,然后单击完成

这将为您提供如下所示的结果,其中它已分割我们的数据,但我们已将其分成列而不是行。

文本到列的结果

所以现在我们将使用转置功能来转置这些数据。

以下是执行此操作的步骤:

  1. 选择要转置的单元格。
  2. 复制这些单元格。 您可以使用快捷键 Control + C,或右键单击所选内容,然后单击“复制”。
  3. 就在您想要转置结果的目标单元格上。
  4. 将光标悬停在“选择性粘贴”选项上(箭头图标处可显示更多选项。单击“转置”选项。
单击将值粘贴为转置图标

上述步骤将为您提供转置的数据,然后您可以根据需要删除文本到列的结果。

文本列结果已转置

虽然这确实有效,但它不如 TEXTSPLIT 函数方法那么优雅。 它涉及更多步骤并具有以下限制:

  • 该方法的结果是静态的,与 TEXTSPLIT 函数方法的结果是动态的不同。 因此,如果更改原始数据,结果将不会更新(而使用 TEXTSPLIT 函数时会更新)
  • 您只能基于一个分隔符进行拆分,而使用 TEXTSPLIT 函数,您可以使用多个分隔符。
Also read: Separate First and Last Name in Excel

使用 VBA(自定义函数)将文本拆分为行

如果您的 Excel 版本中没有 TEXTSPLIT 函数,一个好的解决方法是使用 VBA 创建您自己的函数。

它称为用户定义函数 (UDF)。

它非常简单,创建函数后,您可以像工作表中的任何其他函数一样使用它。

下面的 VBA 代码将创建一个函数,该函数将单元格中的文本拆分为行(基于指定的分隔符)。

'Code developed by Sumit Bansal from 

Function SplitCellToRows(CellValue As Range, Delimiter As String)
    Dim SplitValues() As String
    
    'Split the value by the specified delimiter into an array
    SplitValues = Split(CellValue.Value, Delimiter)
    
    'Go through each element of the array and remove any leading or trailing spaces
    For i = LBound(SplitValues) To UBound(SplitValues)
            SplitValues(i) = Trim(SplitValues(i))
    Next i
    
    'Return the array
    SplitCellToRows = WorksheetFunction.Transpose(SplitValues)
    
End Function

上面的函数(称为 SplitCellToRows)有两个参数:

  • 包含我们要拆分成行的文本的单元格的单元格引用
  • 双引号中的分隔符

将此代码放在哪里?

以下是将这段代码放入 VB 编辑器中的步骤:

  1. 按住 ALT 键,然后按 F11 键。 这将打开 VB 编辑器。 或者,您也可以单击“开发人员”选项卡,然后单击功能区中的 Visual Basic 图标。
  2. 在 VB 编辑器菜单中,单击“插入”选项,然后单击“模块”。 这将插入一个新模块,我们将在其中复制粘贴上面的自定义函数代码。
在 vb 编辑器中插入新模块
  1. 将上述 VBA 代码复制粘贴到模块代码窗口中。
将 vba 代码复制并粘贴到模块代码窗口中
  1. 单击工具栏中的“保存”图标(或使用 Control + S)
保存代码
  1. 关闭 VB 编辑器以返回到工作表。

将代码放入 VB 编辑器后,您可以返回工作表并像任何其他常规工作表函数一样使用此函数。

如何使用这个VBA自定义函数?

下面是一个示例,我在单元格 A2 中有一个地址,我想将其拆分为行。

单元格 A2 中文本到行的地址

我可以使用下面的公式来获取单元格 A4 中的结果:

=SplitCellToRows(A2,",")
在工作表中使用 vba 用户定义函数

上面的公式有两个参数:

  • A2 – 这是具有该地址的单元格的单元格引用
  • “,” – 由于我的分隔符是逗号,因此我已在双引号内指定它。

使用 VBA 创建的函数时需要了解的事项

  • 如果您想稍后重用此函数,则需要使用启用宏的工作簿扩展名 (.xlsm) 保存文件
  • 与其他工作表函数不同,使用 vb 创建的用户定义函数 (UDF) 不会向您显示任何 智能感知 或有关函数参数的帮助。 您需要知道该函数将采用多少个参数以及什么类型。
  • 如果您与其他人共享此工作簿,该函数将无法在他们的文件上运行,除非他们也将函数代码添加到他们的 VB 编辑器中。

您可以使用以下一些方法在 Excel 中将文本拆分为行。

如果您使用的是 Microsoft 365 版 Excel,则无需考虑 TEXTSPLIT 函数以外的内容,因为它可以轻松处理此问题。

如果您无权访问 TEXTSPLIT 函数,则可以使用“文本分列”功能,然后转置结果,也可以使用 VBA 创建自己的自定义函数。

推荐:WordPress活动门票加插件Event Tickets Plus


发表评论