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

时间:2015-01-06 17:04:26

标签: excel vba extract formula

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

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

由于技能不佳,我设法用VBA脚本提取注释,在单个单元格中获取以下字符串:

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

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

对于Line1:

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

对于Line2:

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

对于Line3:

=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"以逗号结束?

我以为我可以退出'#34;州" line = = RIGHT(",&#34 ;; SEARCH(",&#34 ;; A8)-1)但我明显做错了,因为它会删除逗号而不是一个字符串。

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

4 个答案:

答案 0 :(得分:2)

A1 中的 A1 中的逗号分隔数据输入:

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

并复制。例如:

enter image description here

<强> 注意:

为什么不使用 TextToColumns

  • 如果 A1 发生变化,公式行会自动重新计算。
  • 即使 A1 本身包含公式,公式也会有效。

答案 1 :(得分:1)

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

 Dim Names() As String

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

Gary的学生答案非常适合使用内置功能。<​​/ p>

答案 2 :(得分:0)

如果您想要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

答案 3 :(得分:0)

您可以避免添加评论:您是否知道用户可以通过按ALT + RETURN在单元格内添加换行符?

如果有高行d是一个问题并且你不喜欢这种格式化,另一种方法可能是编写一个简单的代码,当用户点击某个范围时,它会改变当前行的高度。它会使其他行不那么高。也许。

只是一个想法。它有利于保持简单。

哈维。