James在工作表中有一些数据,这些数据包含在一系列行中。数据中的列之一包括每个单元具有多行的单元。 (通过在项目之间按Alt + Enter将单元格中的数据分成几行。)James希望将此数据分为多行。例如,如果该行中的单个单元格中有三行数据,则该单元格中的数据应分为三行。

Excel提供了一种方便的方法,可以使用“文本到列”工具将数据拆分为单独的列。这可用于根据ASCII 10字符的存在来分割数据,这是Excel在您按Alt + Enter时插入的内容。问题在于,尽管这成功地将数据拆分为单独的列,却没有像James所要求的那样将其拆分为单独的行。

这意味着该问题的解决方案必须包括使用宏。以下代码显示了一种方法。在本示例中,宏假定您要“扩展”工作表中的所有内容,并且工作表中的数据从第1行开始。

Sub CellSplitter()

Dim Temp As Variant     Dim CText As String     Dim J As Integer     Dim K As Integer     Dim L As Integer     Dim iColumn As Integer     Dim lNumCols As Long     Dim lNumRows As Long

iColumn = 4

Set wksSource = ActiveSheet     Set wksNew = Worksheets.Add

iTargetRow = 0     With wksSource         lNumCols = Cells(1,Columns.Count).End(xlToLeft).Column         lNumRows = Cells(Rows.Count,1).End(xlUp).Row         For J = 1 To lNumRows             CText = .Cells(J, iColumn).Value             Temp = Split(CText, Chr(10))

For K = 0 To UBound(Temp)

iTargetRow = iTargetRow + 1                 For L = 1 to lNumCols                     If L <> iColumn Then                         wksNew.Cells(iTargetRow, L) _                           = .Cells(J, L)

Else                         wksNew.Cells(iTargetRow, L) _                           = Temp(K)

End If                 Next L             Next K         Next J     End With End Sub

请注意,为了运行宏,您将需要使用iColumn变量指定包含要拆分的单元格的列。

如此处所写,宏在第四列中拆分信息。此外,单元格的拆分版本存储在新的工作表中,因此原始工作表完全不受影响。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

链接:/ excelribbon-ExcelTipsMacros [点击此处在新的浏览器标签中打开该特殊页面]。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(9396)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。您可以在此处为Excel的较早菜单界面找到此技巧的版本:

链接:/ excel-Splitting_Information_into_Rows [将信息拆分为行]。