Как автоматически добавить новую строку в Excel на основе данных предыдущих строк - PullRequest
0 голосов
/ 09 ноября 2018

Хорошо, я думаю, что для этого потребуется код VBA.

Вот как выглядит мой файл

Я бы хотел автоматически добавлять новую строку для каждого года, чтобы файл выглядел следующим образом .

Заранее спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Довольно многословно, но работает ... Я точно знаю, что есть более эффективные способы сделать это, но здесь вы идете

Sub sorter()

    Dim row As Long: row = 2
    Dim lastRow As Long
    Dim yearList As Variant
    Dim year As Variant
    Dim extra As Integer: extra = 0
    Dim numYears As Integer

    With ThisWorkbook.Worksheets("your sheet name")
        lastRow = .Cells(.Rows.Count, "A").End(xlUp).row

        Do While True
            yearList = Split(CStr(.Range("C" & row)), "|")
            numYears = UBound(yearList) - LBound(yearList) + 1

            If numYears > 1 Then
                For Each year In yearList
                    .Cells(row + extra, 1).Value = .Cells(row, 1).Value
                    .Cells(row + extra, 2).Value = .Cells(row, 2).Value
                    .Cells(row + extra, 3).Value = year

                    ' for cols D-F
                    .Cells(row + extra, 4).Value = .Cells(row, 4).Value
                    .Cells(row + extra, 5).Value = .Cells(row, 5).Value
                    .Cells(row + extra, 6).Value = .Cells(row, 6).Value

                    If extra = numYears - 1 Then Exit For

                    .Cells(row + extra + 1, 1).EntireRow.Insert
                    extra = extra + 1
                Next year
                extra = 0
            End If
            row = row + 1
            If Len(CStr(.Range("A" & row))) = 0 Then Exit Do
        Loop
    End With
End Sub
0 голосов
/ 09 ноября 2018

довольно просто Вы хотите разделить годы, если еще не разделены

dim year_string() as string
rowint = 2
year_string = split([insert your cell address],"|")
for each year in year_string
    cells(rowint, 1).value2 = [insert your cell address]
    cells(rowint, 2).value2 = [insert your cell address]
    cells(rowint, 3).value2 = year
next year
...