【问题标题】:Seperating multiple strings in excel cell在excel单元格中分隔多个字符串
【发布时间】:2018-11-14 18:05:35
【问题描述】:

我正在搜索一个可以拆分出现在单个单元格中的两个文本字符串的 excel 公式(VBA 不是这种情况下的选项)。

每个字符串可以是任意长度并包含空格,但将由两个或多个空格分隔。第一个字符串之前也几乎总是有多个空格。

因此,例如,您的单元格可能具有以下值:

     north wing       second floor
           south korea   dosan-park

我想从中提取north wingsecond floor 作为第一行的两个单独的单元格,从第二行获取south koreadosan-park

有什么想法吗?非常感谢!

【问题讨论】:

  • 似乎你需要查看 SEARCH()、LEFT()、RIGHT() 以及可能还有 TRIM()
  • 这里的诀窍是字符串的一致性。提供的两个示例可以由Space 的第二个实例拆分。字符串的变化越多,您就越不可能对它们应用一些捕获所有规则。仔细检查和三重检查,您可以确定适用于所有可能的字符串结构的经验法则
  • 感谢 Urdearboy,这帮助我实现了最佳答案 - 在所有单元格中,字符串 1 和 2 以及之前/之后的空格中都有随机数量的字符......但总是有正好 34 个空格开始。我能够使用 SEARCH 和 MID 的组合来解决。因此,如果单元格 A 具有组合字符串,则可以使用以下两个公式:[[ =MID(A1,35,(SEARCH(" ",MID(A1,34,256)))) ]] 和 [[ =TRIM( MID(A1,((SEARCH(" ",MID(A1,34,256)))+34),256)) ]]

标签: excel string trim


【解决方案1】:

从您的示例中,我意识到数据集可能有很多变体。要编写公式,您应该了解各个阶段并尝试实现它。

方法 1:公式

如果您的数据在单元格 A1 中,并且我们假设第一部分始终有两个单独的字符串,那么第一部分的公式如下(例如:北翼,韩国)

=LEFT(TRIM(A1),FIND(CHAR(1),SUBSTITUTE(TRIM(A1)," ",CHAR(1),2))-1)

第二部分如下(例如:二楼,dosan-park)

=RIGHT(TRIM(A1),LEN(TRIM(A1))-FIND(CHAR(1),SUBSTITUTE(TRIM(A1)," ",CHAR(1),2)))

方法 2:Excel 工具和公式

我能想到的另一个解决方案是使用 Excel 工具。您可以将文本放在一个或多个单元格中,然后使用“将文本转换为列”向导将其拆分为多个单元格。

如下操作:

  1. 选择包含要拆分的文本的单元格或列。
  2. 选择数据标签,在数据工具部分点击Text to Columns工具。
  3. Convert Text to Columns向导中,选择Delimited,然后点击Next。
  4. 为您的数据选择分隔符。在您的情况下,只需选择 Space。您可以在数据预览窗口中查看数据的预览。点击下一步。
  5. 选择列数据格式或使用 Excel 为您选择的格式(常规)。选择Destination,即转换后数据的地址。如果您出于任何原因(例如比较)想要保留原始数据,则应更改默认目标地址。我建议您将其更改为下一列地址。例如,如果您的数据位于 A 列第 1 行(地址 $A$1),则应将目标地址更改为 $B$1。点击完成。

现在您已将每个字符串分隔在一个新单元格中,您可以将它们与新单元格中的公式连接起来。

转换后,如果单元格 C1、D1、E1 和 F1 中连续出现“north”、“wing”、“second”和“floor”等字样,则可以在单元格 G1 中使用以下公式连接C1 和 D1 使字符串“北翼”

=CONCAT(C1," ",D1)

对于第二部分,我使用了 TRIM,因为在“dosan-park”的情况下,下一个单元格将是空的。这将在“dosan-park”的末尾增加额外的空间。

=TRIM(CONCAT(E1, " ",F1))

更多说明请看下面的截图。

用值替换公式

您可以复制 (Ctrl + C) 带有公式的单元格并使用选择性粘贴 (Ctrl + V) 然后点击出现在旁边的小粘贴图标单元格,然后点击 V 按钮

【讨论】:

  • 谢谢!虽然我最终没有使用这个结果(有关我的解决方案,请参阅我的第一篇文章中的 cmets),但了解这个概念非常有帮助,我相信它可以作为解决方案 :)
【解决方案2】:

根据需要放入方程式并向下拖动

B2 = TRIM(LEFT(A2,SEARCH(CHAR(32),TRIM(A2),SEARCH(CHAR(32),TRIM(A2))+1)))
C2 = TRIM(RIGHT(A2,LEN(A2)-SEARCH(CHAR(32),TRIM(A2),SEARCH(CHAR(32),TRIM(A2))+1)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多