在Excel中将一行分割成多行
我有一个Excel工作表,如下所示:
Drink Apple Juice, Orange Juice, Coffee Cup Ceramic Cup, Paper Cup, Plastic Cup, Stainless Steel Cup
我想分割和整理单元格值:
Drink Apple Juice Drink Orange Juice Drink Coffee Cup Ceramic Cup Cup Paper Cup Cup Plastic Cup Cup Stainless Steel Cup
非常感谢。
EDITTED
你也可以试试这个:
'for getting used range in rows Function rngused(RowNo As Long) As Range Dim rngg As Range, lastcol As Range Set rngg = ActiveSheet.Rows(RowNo) Set lastcol = rngg.Find(What:="*", After:=Cells(RowNo, 1), SearchDirection:=xlPrevious) Set rngused = Range(Cells(RowNo, 1), Cells(RowNo, lastcol.Column)) Set rngg = Nothing: Set lastcol = Nothing End Function 'for splitting and merging Sub SplitCol2Row(rngPassed As Range, offcet As Long) Dim i As Long, rngMerged As Range For i = 2 To rngPassed.Columns.Count Set rngMerged = Application.Union(rngPassed(1), rngPassed(i)) rngMerged.Copy Range("A" & i - 1).Offset(offcet, 0).PasteSpecial xlPasteAll Next Set rngMerged = Nothing End Sub 'main procedure Sub Main() Application.ScreenUpdating = False Dim rngRow As Range, lastrow As Range, ii As Long For ii = 2 To 4 'these are source rows Set rngRow = rngused(ii) Set lastrow = Range("A:A").Find(What:="*", After:=[A1], SearchDirection:=xlPrevious) SplitCol2Row rngRow, lastrow.Row Application.CutCopyMode = False Set rngRow = Nothing: Set lastrow = Nothing Next Application.ScreenUpdating = False End Sub
这个macros应该做得很好:
Sub SplitCellsAndExtend_New() 'takes cells with inside line feeds and creates new row for each. 'reverses merge into top cell. 'turn off updates to speed up code execution With Application .ScreenUpdating = False .EnableEvents = False .Calculation = xlCalculationManual End With Dim strCell As String, lastRow As Long, lRowLoop As Long, j As Long, arSplit Application.ScreenUpdating = False Const lColSplit As Long = 2 'update column number for the column that must be split Const sFirstCell As String = "A1" Dim sSplitOn As String sSplitOn = "," 'separating character lastRow = Cells(Rows.Count, lColSplit).End(xlUp).Row For lRowLoop = lastRow To 1 Step -1 arSplit = Split(Cells(lRowLoop, lColSplit), sSplitOn) If UBound(arSplit) > 0 Then Rows(lRowLoop + 1).Resize(UBound(arSplit) + 1).Insert Cells(lRowLoop, lColSplit).Resize(, UBound(arSplit) + 1).Value = arSplit Cells(lRowLoop, lColSplit).Resize(, UBound(arSplit) + 1).Copy Cells(lRowLoop + 1, lColSplit).PasteSpecial Transpose:=True Cells(lRowLoop, 1).Resize(, lColSplit - 1).Copy Cells(lRowLoop + 1, 1).Resize(UBound(arSplit) + 1) Rows(lRowLoop).Delete End If Set arSplit = Nothing Next With Application .ScreenUpdating = True .EnableEvents = True .Calculation = xlCalculationAutomatic End With End Sub