Excel:从单元格中提取由标记分隔的文本字符串的公式

Excel: Formula to extract a string of text delimited by markers from cells

我正在处理包含已插入单元格评论中的邮政地址的电子表格 每个评论包含一个由可变行数组成的地址(该死的英国地址,它们最多可以有 7 行!)格式如下:

Line1,
Line2,
Line3,
[...],
State

由于我的技术不佳,我设法用 VBA 脚本提取评论,在单个单元格上获得以下字符串:

Line1,Line2,Line3,[...],State

此时必须将逗号之间的每个字符串提取到其自己的单元格中。 我设法使用以下公式提取了前 3 行:

第 1 行:

=LEFT(A8;(SEARCH(",";A8))-1)

第 2 行:

=MID(A8; SEARCH(",";A8)+1; SEARCH(","; A8; SEARCH(","; A8)+1)-SEARCH(",";A8)-1)

第 3 行:

=MID(A8; SEARCH(",";A8;SEARCH(",";A8;SEARCH(",";A8;SEARCH(",";A8)))+1)+1;SEARCH(","; A8; SEARCH(","; A8;SEARCH(",";A8)+1)+1)-SEARCH(",";A8;SEARCH(",";A8)+1)-1)

从这一点开始,我的大脑开始出现溢出错误...我可能需要睡几天。

谁能帮我找到 "line6",最后告诉我如何提取没有逗号结尾的 "State line"?

我以为我可以用 =RIGHT(",";SEARCH(",";A8)-1) 拉出 "State" 行,但我显然做错了什么,因为它拉出了逗号而不是字符串。

我想我可以用 VBA 脚本做任何事情,但我还没有那么熟练:(

A1 中使用逗号分隔数据,在 B1 中输入

=TRIM(MID(SUBSTITUTE($A1,",",REPT(" ",999)),COLUMNS($A:A)*999-998,999))

并复制过来。例如:

注:

为什么不使用 TextToColumns

  • 如果 A1 更改,公式行 re-calculates 自动。
  • 即使 A1 本身包含一个公式,公式行仍然有效。

如果您想以编程方式而不是使用内置函数来执行此操作,请查看用于分割逗号分隔字符串的拆分函数。它会将您的输入字符串拆分成一个数组。然后你可以用这个数组做任何你喜欢的事情。

 Dim Names() As String

 Names() = Split(inputValue, ",")
 For i = 0 To UBound(Names)
    ' do what you want with each piece
 Next

Gary​​ 学生的回答非常适合使用内置函数。

如果您想要 VBA 解决方案:

Sub spitString()

    Dim sourceRange As Range
    Dim stringArr() As String
    Dim i As Integer


    Set sourceRange = ActiveSheet.Range("A1")
    stringArr = Split(sourceRange.Value, ",")

    For i = LBound(stringArr) To UBound(stringArr)
        sourceRange.Offset(0, i + 1).Value = stringArr(i)
    Next i

End Sub

您可以避免添加注释:您知道用户可以通过按 ALT+RETURN 在单元格内添加换行符吗?

如果高行 d 是个问题并且您不喜欢这种格式,另一种方法可能是编写一段简单的代码,当用户在特定范围内单击时更改当前行的高度.它会使其他行的高度降低。也许。

只是一个想法。它有保持简单的好处。

哈维。