根据行的单元格数据在 excel 中插入复制的行,然后根据行的引用单元格的部分填充单元格
Insert copied row in excel based on row's cell data, then populate cells based on parts of row's referenced cell
任何人都可以理解我正在尝试做的事情吗?
这是我能想到的最好的用语言来解释它的方式。
根据单元格数据在 excel 中插入行,然后将前一行数据复制到新行,然后从原始行引用的单元格数据的部分内容填充单元格。
这是之前的图片:
这是结果的图像:
我不知道这是否可以通过 VBA/Macro、内置公式等来完成。
描述我的手动过程的另一种方法是我从第 2 行开始,如果 C2 中有一个值,那么我插入一个新行,但是 C2 中有很多值,用逗号分隔。然后我将 A2 和 B2 中的内容复制到新的空白行 3 和 4 中,然后我将值从 C2 中分离出来并将它们粘贴到 C2 C3、C4 中。如果一行在 C 列中没有值,那么我将移动到下一行,依此类推,直到我到达 C 列中具有单元格值的一行,然后从上面重复该方法。
在您的工作簿中,创建一个名为“目的地”的新作品sheet。将以下代码复制并粘贴到 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
现在 select 您的数据范围包括 headers(如图所示),然后 运行 宏。
完成后,检查“目的地”sheet,您应该会得到结果。
我根据您提供的数据集编写了这篇文章,如果您有任何其他情况,可能需要进行调整。
告诉我进展如何。
任何人都可以理解我正在尝试做的事情吗? 这是我能想到的最好的用语言来解释它的方式。 根据单元格数据在 excel 中插入行,然后将前一行数据复制到新行,然后从原始行引用的单元格数据的部分内容填充单元格。
这是之前的图片:
这是结果的图像:
我不知道这是否可以通过 VBA/Macro、内置公式等来完成。
描述我的手动过程的另一种方法是我从第 2 行开始,如果 C2 中有一个值,那么我插入一个新行,但是 C2 中有很多值,用逗号分隔。然后我将 A2 和 B2 中的内容复制到新的空白行 3 和 4 中,然后我将值从 C2 中分离出来并将它们粘贴到 C2 C3、C4 中。如果一行在 C 列中没有值,那么我将移动到下一行,依此类推,直到我到达 C 列中具有单元格值的一行,然后从上面重复该方法。
在您的工作簿中,创建一个名为“目的地”的新作品sheet。将以下代码复制并粘贴到 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
现在 select 您的数据范围包括 headers(如图所示),然后 运行 宏。
完成后,检查“目的地”sheet,您应该会得到结果。
我根据您提供的数据集编写了这篇文章,如果您有任何其他情况,可能需要进行调整。
告诉我进展如何。