У меня есть несколько строк данных, которые относятся к 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