我很难从单元格A2:A16中获取文本进入单独的列。所以基本上如果Cell A2有3个文本换行符,那么将它们放入单元格B2,C2,D2,e.c.t。我已经尝试使用Text to Columns,但这没有用。它只保留了第一个要点。下图是我希望公式如何工作的示例。如果有任何VBA或公式可行。
我希望数据显示的方式
经过一个小时的研究,我设法通过调整和编辑一些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
答案 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 Return
和Line Feed
Chr(13) Chr(10)
的组合。
如果您使用的是Excel 2010或更高版本,则可以使用Power Query
或Data 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