Вставьте скопированную строку в Excel на основе данных ячейки строки, затем заполните ячейки на основе частей ячейки, на которую ссылается строка - PullRequest
0 голосов
/ 17 марта 2019

Кто-нибудь может понять, что я пытаюсь сделать?Это лучший способ объяснить это словами.Вставьте строку в Excel на основе данных ячейки, затем скопируйте данные предыдущей строки в новую строку, а затем заполните ячейку из частей исходных данных ячейки, на которые имеются ссылки.

Вот изображение перед:

Before

А вот изображение результата:

and After

Я не знаюесли это можно сделать с помощью VBA / Macro, встроенной формулы и т. д.

Другой способ описать мой ручной процесс - начать со строки 2, если в C2 есть значение, тогда я вставляю новую строкуоднако многие значения в C2 разделяются запятой.Затем я копирую содержимое из A2 и B2 в новые пустые строки 3 и 4, затем отделяю значения от C2 и вставляю их в C2 C3, C4.Если строка не имеет значения в столбце C, я перехожу к следующей строке и т. Д., Пока не достигну строки в столбце C, содержащей значение ячейки, и повторю метод, описанный выше.

1 Ответ

0 голосов
/ 17 марта 2019

В вашей рабочей книге создайте новый рабочий лист с именем " 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

Теперь выберите диапазон данных, включая заголовки (как показано), а затем запустите макрос.

enter image description here

После того, как это сделано, проверьте лист " Пункт назначения ", и у вас должен быть свой результат.

Я написал это на основе предоставленного вами набора данных, возможно, понадобятся настройки, если у вас есть какие-либо сценарии, кроме этого.

Дайте мне знать, как это происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...