Формула для повторения предыдущей строки несколько раз на основе числа в ячейке - PullRequest
0 голосов
/ 15 июня 2019

У меня есть несколько строк данных, которые относятся к x числу женщин и x числу мужчин в строке.

Мне нужно разбить их на отдельные записи (по 1 строке для каждой).Есть ли формула Excel, которая будет смотреть на первую строку и на основе числа в столбце D, вернуть это количество строк, и данные в a, b, c одинаковы, однако для столбцов e, f, g, h,заменить столько записей на 1 все на другом листе?

См. изображение экрана.Есть 9 строк с 1 на уровне 1, 17 с 1 на уровне 2 и т. Д. Я попробовал комбинации базовых формул, которые работают, но занимают много времени, и есть 1342 строки, которые необходимо разбить на отдельные записи. введите описание изображения здесь

Вот лист после разворота, который вы предложили Дэвиду. Таблица после отмены поворота

codeandoutput

КОД ДЛЯ 5 УРОВНЕЙ с кодом для медленных проблем Sub CreateIndividualRecordsLevel5 () Dim i As Long Dim a As Long Dimb Длинный тусклый c Длинный тусклый d Длинный тусклый e Длинный тусклый n Длинный тусклый instancesInRows Длинный тусклый уровень1 Длинный тусклый уровень2 Длинный тусклый уровень3 Длинный тусклый уровень4 Длинный тусклый уровень5 Длинный тусклый wb Как книга Тусклый тусклыйРабочий лист

Application.ScreenUpdating = False
Application.Calculation = xlCalculationAutomatic

Application.DisplayStatusBar = False
Application.EnableEvents = False

Set wb = ThisWorkbook
Set ws = wb.Worksheets("WHITE")

n = 0


' Outer loop 'goes' through your original table and for each cell in
' column D checks how many instances there are.
For i = 2 To 523

        instancesInRow = ws.Cells(i, 4).Value
        level1 = ws.Cells(i, 5).Value
        level2 = ws.Cells(i, 6).Value
        level3 = ws.Cells(i, 7).Value
        level4 = ws.Cells(i, 8).Value
        level5 = ws.Cells(i, 9).Value

        ' Inner loop 'knows' how many times it needs to loop-copy the same
        ' row into the new table/worksheet.
        For a = 1 To level1
                n = n + 1
                ws.Range("J" & n & ":M" & n).Value = ws.Range("A" & i & ":I" & i).Value
                ws.Range("N" & n).Value = 1
                ws.Range("O" & n).Value = 0
                ws.Range("P" & n).Value = 0
                ws.Range("Q" & n).Value = 0
                ws.Range("R" & n).Value = 0
        Next a

        For b = 1 To level2
                n = n + 1
                ws.Range("J" & n & ":M" & n).Value = ws.Range("A" & i & ":I" & i).Value
                ws.Range("N" & n).Value = 0
                ws.Range("O" & n).Value = 1
                ws.Range("P" & n).Value = 0
                ws.Range("Q" & n).Value = 0
                ws.Range("R" & n).Value = 0
        Next b

        For c = 1 To level3
                n = n + 1
                ws.Range("J" & n & ":M" & n).Value = ws.Range("A" & i & ":I" & i).Value
                ws.Range("N" & n).Value = 0
                ws.Range("O" & n).Value = 0
                ws.Range("P" & n).Value = 1
                ws.Range("Q" & n).Value = 0
                ws.Range("R" & n).Value = 0
        Next c

        For d = 1 To level4
                n = n + 1
                ws.Range("J" & n & ":M" & n).Value = ws.Range("A" & i & ":I" & i).Value
                ws.Range("N" & n).Value = 0
                ws.Range("O" & n).Value = 0
                ws.Range("P" & n).Value = 0
                ws.Range("Q" & n).Value = 1
                ws.Range("R" & n).Value = 0
        Next d

        For e = 1 To level5
                n = n + 1
                ws.Range("J" & n & ":M" & n).Value = ws.Range("A" & i & ":I" & i).Value
                ws.Range("N" & n).Value = 0
                ws.Range("O" & n).Value = 0
                ws.Range("P" & n).Value = 0
                ws.Range("Q" & n).Value = 0
                ws.Range("R" & n).Value = 1

        Next e


                ' Counter n counts how many rows you have copied so far,
                'in order to know in which row to copy to the new range

Next i

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

Application.DisplayStatusBar = True
Application.EnableEvents = True

End Sub

1 Ответ

0 голосов
/ 16 июня 2019

Извините, я допустил ошибку, и это заняло немного больше времени. Вот и мы:

Проверьте изображение с результатом здесь >>> введите описание изображения здесь

    Private Sub testcopyrow()
    Dim i As Long
    Dim a As Long
    Dim b As Long
    Dim c As Long
    Dim d As Long
    Dim e As Long
    Dim n As Long
    Dim instancesInRow As Long
    Dim level1 As Long
    Dim level2 As Long
    Dim level3 As Long
    Dim level4 As Long
    Dim wb As Workbook
    Dim ws As Worksheet

    Set wb = ThisWorkbook
    Set ws = wb.Worksheets("SplitRowsByInstances")

    n = 0

    ' Outer loop 'goes' through your original table and for each cell in
    ' column D checks how many instances there are.
    For i = 2 To 7

            instancesInRow = ws.Cells(i, 4).Value
            level1 = ws.Cells(i, 5).Value
            level2 = ws.Cells(i, 6).Value
            level3 = ws.Cells(i, 7).Value
            level4 = ws.Cells(i, 8).Value

            ' Inner loop 'knows' how many times it needs to loop-copy the same
            ' row into the new table/worksheet.
            For a = 1 To level1
                    n = n + 1
                    ws.range("J" & n & ":M" & n).Value = ws.range("A" & i & ":H" & i).Value
                    ws.range("N" & n).Value = 1
                    ws.range("O" & n).Value = 0
                    ws.range("P" & n).Value = 0
                    ws.range("Q" & n).Value = 0
            Next a

            For b = 1 To level2
                    n = n + 1
                    ws.range("J" & n & ":M" & n).Value = ws.range("A" & i & ":H" & i).Value
                    ws.range("N" & n).Value = 0
                    ws.range("O" & n).Value = 1
                    ws.range("P" & n).Value = 0
                    ws.range("Q" & n).Value = 0
            Next b

            For c = 1 To level3
                    n = n + 1
                    ws.range("J" & n & ":M" & n).Value = ws.range("A" & i & ":H" & i).Value
                    ws.range("N" & n).Value = 0
                    ws.range("O" & n).Value = 0
                    ws.range("P" & n).Value = 1
                    ws.range("Q" & n).Value = 0
            Next c

            For d = 1 To level4
                    n = n + 1
                    ws.range("J" & n & ":M" & n).Value = ws.range("A" & i & ":H" & i).Value
                    ws.range("N" & n).Value = 0
                    ws.range("O" & n).Value = 0
                    ws.range("P" & n).Value = 0
                    ws.range("Q" & n).Value = 1
            Next d


                    ' Counter n counts how many rows you have copied so far,
                    'in order to know in which row to copy to the new range

    Next i

    End Sub

Дайте мне знать, если я помог!

...