Добрый день, уважаемые форумчане! Суть вопроса в следующем: Есть таблица, с текстовыми и числовыми данными, и необходимо добавить ниже каждой строки копии этой самой строки в количестве указанном в определенном столбце этой строки.
Привожу пример, а так же прикладываю файл .xlsx:
Исходная таблица:
Подразделение
Должность
Количество штатных единиц
Оклад
Отдел №1
Начальник отдела
1
10000
Отдел №1
Экономист
3
5000
Отдел №2
Инженер
5
6000
Отдел №2
Программист
2,5
7000
. То, что нужно получить:
Подразделение
Должность
Количество штатных единиц
Оклад
Отдел №1
Начальник отдела
1
10000
Отдел №1
Экономист
3
5000
Отдел №1
Экономист
3
5000
Отдел №1
Экономист
3
5000
Отдел №2
Инженер
5
6000
Отдел №2
Инженер
5
6000
Отдел №2
Инженер
5
6000
Отдел №2
Инженер
5
6000
Отдел №2
Инженер
5
6000
Отдел №2
Программист
2,5
7000
Отдел №2
Программист
2,5
7000
Отдел №2
Программист
2,5
7000
. Как мы видим, каждую строку размножили в количестве указанном в столбце "Количество штатных единиц" за вычетом одной, уже существующей. Надо учесть, что неполные единицы (Программист - 2,5 единицы) нужно копировать округляя количество добавляемых строк до целого в большую сторону.
For iY = Cells(Rows.Count, 1).End(xlUp).Row To 4 Step -1
n = WorksheetFunction.RoundUp(Cells(iY, 3).Value, 0) - 1
For i = 1 To n
Rows(iY + 1).Insert
Rows(iY).Copy Rows(iY + 1)
Cells(iY + 1, 1).Value = "Отдел №" & CStr(n - i + 2)
Next
Next
estrukov,как вставить пустые строки по числу в ячейке смотрите ТУТ. Как заполнить образовавшееся пустое пространство значениями смотрите ТУТ Для округления числа в большую сторону до целого используйте доп. столбец с функцией =ОКРУГЛВВЕРХ(ссылка на ячейку;0)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
For iY = Cells(Rows.Count, 1).End(xlUp).Row To 4 Step -1
n = WorksheetFunction.RoundUp(Cells(iY, 3).Value, 0) - 1
For i = 1 To n
Rows(iY + 1).Insert
Rows(iY).Copy Rows(iY + 1)
Next
Next