Excel:提取由单元格中的标记分隔的文本string的公式

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

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

由于我的技能很差,我设法使用VBA脚本来提取注释,在单个单元格中获得以下string:

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

此时,逗号之间的每个string都必须提取到它自己的单元格中。 我已经设法提取以下公式的前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”,最后build议我怎么把没有逗号的“State line”结束?

我认为我可以用“RIGHT”(“,”; SEARCH(“,”; A8)-1)将“状态”行取出来,但是我显然做了错误的事情,因为这会拉出逗号而不是string。

我想我可以做一切与VBA脚本,但我不熟练呢:(

如果您想以编程方式执行此操作而不是使用内置函数,请检查分割函数以剪切以逗号分隔的string。 它将你的inputstring分割成一个数组。 那么你可以做任何你喜欢的arrays。

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

加里的学生的答案是伟大的使用内置的function。

A1逗号分隔数据B1中input:

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

并复制。 例如:

在这里输入图像说明

注意:

为什么不使用TextToColumns

  • 如果A1改变,公式的行将自动重新计算。
  • 即使A1本身包含一个公式,公式行也可以工作。

如果你想要一个VBA解决scheme:

 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是一个问题,你不喜欢这种格式,另一种方法可能是编写一些简单的代码,当用户点击某个范围时,改变当前行的高度。 这会使其他行不那么高。 也许。

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

哈维。