Excel如何将一个单元格中的换行符提取到单独的列中

时间:2018-02-05 10:54:47

标签: excel excel-vba excel-formula vba

我很难从单元格A2:A16中获取文本进入单独的列。所以基本上如果Cell A2有3个文本换行符,那么将它们放入单元格B2,C2,D2,e.c.t。我已经尝试使用Text to Columns,但这没有用。它只保留了第一个要点。下图是我希望公式如何工作的示例。如果有任何VBA或公式可行。

我希望数据显示的方式

Excel bullet points separated into columns

Excel Data DropBox Download

经过一个小时的研究,我设法通过调整和编辑一些VBA代码来提出解决方案。由于Text to columns方法不起作用,下面的代码起了作用。选择单元格A2并运行宏后,它将提取所有换行符并将它们放在列中。

Sub splittext()
 'splits Text active cell using ALT+10 char as separator
    Dim splitVals As Variant
    Dim totalVals As Long
    Dim i As Integer

    For i = 1 To 1000
      splitVals = Split(ActiveCell.Value, Chr(10))
      totalVals = UBound(splitVals)
      Range(Cells(ActiveCell.Row, ActiveCell.Column + 1), Cells(ActiveCell.Row, ActiveCell.Column + 1 + totalVals)).Value = splitVals
      ActiveCell.Offset(1, 0).Activate
    Next i
End Sub

4 个答案:

答案 0 :(得分:0)

文本到列是正确的方法。以下是实现您想要的详细说明:

https://www.extendoffice.com/documents/excel/2211-excel-split-cell-by-carriage-return.html

基本上你需要将另一个分隔符定义为 Ctrl + J ,然后在下一个窗口中选择你的目标范围

答案 1 :(得分:0)

I suggest this lengthy formula:

=IF(COLUMN()-3<LEN($A2)-LEN(SUBSTITUTE($A2,CHAR(10),"")),MID(LEFT($A2,IFERROR(FIND(CHAR(1),SUBSTITUTE($A2,CHAR(10),CHAR(1),COLUMN()-1))-1,LEN($A2))),IFERROR(FIND(CHAR(1),SUBSTITUTE($A2,CHAR(10),CHAR(1),COLUMN()-2))+1,1),1000),"")

It can be broken down into several parts:

LEN($A2)-LEN(SUBSTITUTE($A2,CHAR(10),"")) gives the number of newlines in the cell (CHAR(10) is a newline). As long as the current column minus 3 (B1 cell is column 2, a cell with 2 lines will have 1 newline, it will stop at column 3, where 3-3<1 is true, and the next column 4 will be false)

LEFT($A2,IFERROR(FIND(CHAR(1),SUBSTITUTE($A2,CHAR(10),CHAR(1),COLUMN()-1))-1,LEN($A2))) gives all the text from beginning to the nth bullet we need

MID(above ,IFERROR(FIND(CHAR(1),SUBSTITUTE($A2,CHAR(10),CHAR(1),COLUMN()-2))+1,1),1000) gets the text as from the (n-1)th bullet until the end of the line.

I uploaded the file here

答案 2 :(得分:0)

您的分隔符是Carriage ReturnLine Feed Chr(13) Chr(10)的组合。

如果您使用的是Excel 2010或更高版本,则可以使用Power QueryData Get & Transform进行拆分,因为它们提供了将该组合用作分隔符的选项。

如果您使用的是早期版本,则可以使用公式或删除CHR(13),然后拆分CHR(10)来执行此操作。

您可以使用的公式是:

=IFERROR(INDEX(TRIM(MID(SUBSTITUTE($A2,CHAR(13)&CHAR(10),REPT(" ",999)),seq_999,999)),COLUMNS($A:A)),"")

其中seq_999是命名公式,指的是:

=IF(ROW(INDEX($1:$65535,1,1):INDEX($1:$65535,255,1))=1,1,(ROW(INDEX($1:$65535,1,1):INDEX($1:$65535,255,1))-1)*999)

答案 3 :(得分:0)

经过一个小时的研究,我设法通过调整和编辑一些VBA代码来提出解决方案。由于Text to columns方法不起作用,下面的代码起了作用。选择单元格A2并运行宏后,它将提取所有换行符并将它们放在列中。

Sub splittext()
 'splits Text active cell using ALT+10 char as separator
    Dim splitVals As Variant
    Dim totalVals As Long
    Dim i As Integer

    For i = 1 To 1000
      splitVals = Split(ActiveCell.Value, Chr(10))
      totalVals = UBound(splitVals)
      Range(Cells(ActiveCell.Row, ActiveCell.Column + 1), Cells(ActiveCell.Row, ActiveCell.Column + 1 + totalVals)).Value = splitVals
      ActiveCell.Offset(1, 0).Activate
    Next i
End Sub

Image of context placed into columns