簡體   English   中英

根據行的單元格數據在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 /宏,內置公式等完成此操作

另一種描述我的手動過程的方法是從第2行開始,如果C2中有值,那么我插入一個新行,但是在C2中用逗號分隔的多個值。 然后,我將內容從A2和B2復制到新的空白行3和4,然后將值從C2中分離出來並將其粘貼到C2 C3,C4中。 如果一行在C列中沒有值,那么我將移動到下一行,依此類推,直到我到達C列中具有單元格值的行並從上面重復該方法。

在您的工作簿中,創建一個名為“ Destination ”的新工作表。 將以下代碼復制並粘貼到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

現在選擇您的數據范圍,包括標題(如圖所示),然后運行宏。

在此輸入圖像描述

完成后,檢查“ 目的地 ”表,您應該得到結果。

我根據您提供的數據集編寫了這個,如果您有任何其他情況,可能需要調整。

讓我知道事情的后續。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM