以逗号分隔单元格中的文本

我们假设一个简单的Excel电子表格包含两列A和B,其中B列中有逗号分隔的值。 我需要一个VBA函数来分割这些值,每个新的行从包含它们的单元格下面的行开始。 这里是一个例子:

PRE

Column A Column B AAAAA this,is,a,test BBBBB other,values CCCCC 1,2,3,4 

POST

 Column A Column B AAAAA this is a test BBBBB other values CCCCC 1 2 3 4 

我发现这个问题对我有帮助: 在换行符的单元格中分割文本,并以这种方式修改它的解决scheme:

 Sub SplitIt() ActiveSheet.Copy after:=Sheets(Sheets.count) Dim tmpArr As Variant Dim Cell As Range For Each Cell In Range("B1", Range("B2").End(xlDown)) If InStr(1, Cell, ",") <> 0 Then tmpArr = Split(Cell, ",") Cell.Offset(1, 0).Resize(UBound(tmpArr), 1). _ EntireRow.Insert xlShiftDown Cell.Resize(UBound(tmpArr) + 1, 1) = Application.Transpose(tmpArr) End If Next Application.CutCopyMode = False End Sub 

但它不会向下移动列B值。 有没有办法做到这一点?

在OP的澄清之后编辑的问题是B栏中值的转移

编辑2来处理这个事实,在Excel 2016中,似乎新添加的工作表不会成为活动工作表

编辑3以考虑列C中的值

 Sub SplitIt() Dim tmpArr As Variant, vals As Variant Dim iRow As Long vals = Range("C1", Cells(Rows.Count, "A").End(xlUp)).value With Worksheets.Add(after:=Sheets(Sheets.Count)) For iRow = LBound(vals) To UBound(vals) tmpArr = VBA.Split(vals(iRow, 2), ",") With .Cells(Rows.Count, "B").End(xlUp).Offset(1) .Offset(, -1).value = vals(iRow, 1) .Offset(1).Resize(UBound(tmpArr) + 1).value = Application.Transpose(tmpArr) .Offset(, 1).value = vals(iRow, 3) End With Next End With End Sub