任何人都可以理解我要做什么吗? 这是我想用语言解释的最好方法。 根据单元格数据在excel中插入行,然后将先前的行数据复制到新行,然后从原始行引用的单元格数据的一部分中填充单元格。
下面是一张图片:
这是结果的图像:
我不知道是否可以使用VBA /宏,内置公式等来完成此操作。
描述我的手动过程的另一种方法是,我从第2行开始,如果C2中有一个值,则我插入新行,因为C2中的许多值都用逗号分隔。然后,我将内容从A2和B2复制到新的空白行3和4,然后将值从C2中分离出来并将它们粘贴到C2,C3,C4中。如果一行在C列中没有值,那么我将移至下一行,依此类推,直到到达C列中具有单元格值的行,然后从上方重复该方法。
答案 0 :(得分:0)
在您的工作簿中,创建一个名为“ 目标”的新工作表。将以下代码复制并粘贴到VBA中的新模块中……
Public Sub SplitRowsBasedOnLastColumn()
Dim rngCells As Range, lngRow As Long, lngCol As Long, strLastColValue As String, i As Long
Dim strDelimiter As String, objDestSheet As Worksheet, lngWriteRow As Long, arrValues
Set rngCells = Selection
strDelimiter = ","
Set objDestSheet = Sheets("Destination")
lngWriteRow = 1
With rngCells
objDestSheet.Cells.Clear
For lngCol = 1 To .Columns.Count
objDestSheet.Cells(1, lngCol) = .Cells(1, lngCol)
Next
For lngRow = 2 To .Rows.Count
strLastColValue = .Cells(lngRow, .Columns.Count)
If strLastColValue = "" Then strLastColValue = " "
arrValues = Split(strLastColValue, strDelimiter)
For i = 0 To UBound(arrValues)
lngWriteRow = lngWriteRow + 1
For lngCol = 1 To .Columns.Count - 1
objDestSheet.Cells(lngWriteRow, lngCol) = .Cells(lngRow, lngCol)
Next
objDestSheet.Cells(lngWriteRow, .Columns.Count) = Trim(arrValues(i))
Next
Next
End With
End Sub
现在选择包括标头的数据范围(如图所示),然后运行宏。
完成后,检查“ 目的地”表,您应该会得到结果。
我是根据您提供的数据集编写的,如果您有其他情况,可能需要进行调整。
让我知道怎么回事。